【阅读笔记】你不知道的Javascript--强制类型转换4
目录
- 强制类型转换
- 基本概念
- JSON
- boolean
- 强转归纳
- 其他知识点
- 被诟病的==
- 安全使用隐式强转法则
- 抽象关系比较
- 语法
- 表达式变动
强制类型转换
基本概念
类型转换发生在静态类型语言的编译阶段;
强制类型转换则发生在动态类型语言的运行时(runtime)
JSON
JSON.stringify 用来把 JSON 文件字符串化,调用方法 tostring
字符串化的结果永远是字符串,所以会出现下面的双双引号结果
JSON.stringify(42); // 42
JSON.stringify("42"); // ""42""
JSON.stringify 在对象中遇到 undefined、function 和 symbol 时会自动将其忽略,在数组中则会返回 null
toJSON()指的是:“返回一个能够被字符串化的安全的 JSON 值”,而不是“返回一个 JSON 字符串”
可以向 JSON.stringify 传递一个 replacer 参数,表示仅转换每个属性;
比如下方代码表示仅转换对象 a 中的属性 b,所以 c 没有字符串化
var a = {b: 42,c: "42",
};
JSON.stringify(a, ["b"]); // "{"b":42}"
JSON.stringify 有第三个参数 space,表示指定输出的缩进格式
JSON.stringify(a,null,3)
boolean
对于所有真值为 true,而所有假值为 false
所有字符串都是真值,除了空字符串是假值外
显式强转为布尔类型最常用的是两个感叹号!!
var a = "";
!!a; // false
强转归纳
对于显式强转,比如下方字符串转数值,以及数值转字符串
这里不适用 new,并不创建封装对象
var num1 = 100;
var num2 = String(num1);var str1 = "1.11";
var str2 = Number(str1);
单个加号运算符当做一元运算符,也是显式强转运算,可以把字符串类型数据转换成数值类型
var a = +"100"
js 中的构造函数没有参数时可以不用带()
如var time = new Data().geTime();
其他知识点
~x 等同于 -(x+1)
~42 = -(42+1) = -43
抽象渗漏:指代码中暴露了底层的实现细节
很多程序员喜欢用~~代替 Math.floor(..)进行向下取整;
而事实上~~仅适用于 32 位数字
~~-49.6 == -49
被诟病的==
==负责执行隐式强转
当使用&&或者||连接两个包含==的比较式时,二者是先后执行而非同时执行的!
如下会先判断 a==10 之后才判断 a==11
if(a==10 && a==11){}
千万不要使用==进行假值相等比较,会出现你意想不到的情况
下面例举了四种"假阳"的情况
"0" == false; // true
false == 0; // true
false == ""; // true
"" == 0; // true42 == "42"; // true
"foo" == ["foo"]; // true
安全使用隐式强转法则
如果两边的值中有 true 或者 false,千万不要使用==
如果两边的值中有[]、""或者 0,尽量不要使用==
因为 typeof 总是返回七种基本类型之一,故在 typeof 管理下的==强转是被允许的
typeof x == "function"
一般的,我们为了更安全,抛弃==改而使用===
抽象关系比较
抽象关系比较即针对诸如x<y这种格式的代码中隐式强转规则
若双方中有一个是非字符串,则均转成数字后执行数字大小比较
若双方均为字符串,则按照字母顺序比较
var n1 = [42];
var n2 = ["43"];
a < b; // truevar n3 = ["42"];
var n4 = ["042"];
a < b; // false
语法
表达式变动
事实上,ES5 规定变量声明实际上是有返回值的,只不过被算法屏蔽掉了,返回结果为空
目前可以使用两种方式将获得语句的结果值赋值给另一个变量
直接 eval 填入代码,或者塞入 ES7 新增的 do 代码块
var a, b;
a = eval("if(true){b=100;}");a = do {if (true) {b = 100;}
};
标签语句:可以使用 goto 回到该标签的位置继续执行代码
function foo() {bar: {console.log("hello");break bar;}console.log("word");
}
foo(); // hello world
相关文章:
【阅读笔记】你不知道的Javascript--强制类型转换4
目录强制类型转换基本概念JSONboolean强转归纳其他知识点被诟病的安全使用隐式强转法则抽象关系比较语法表达式变动强制类型转换 基本概念 类型转换发生在静态类型语言的编译阶段; 强制类型转换则发生在动态类型语言的运行时(runtime) JSON…...
华为OD机试真题Python实现【有效子字符串】真题+解题思路+代码(20222023)
有效子字符串 题目 输入两个字符串S和L,都只包含小写字母, S长度 <= 100,L长度 <= 500000, 判断S是否是L的有效子字符串, 判定规则:S中的每个字符在L中都能找到(可以不连续) 且S在L中字符的前后顺序与S中顺序要保持一致 例如: S="ace"是L="abcd…...
上门按摩预约APP源码-东郊到家源码(开发,PHP,平台搭建)
一、什么是上门按摩预约APP源码? 上门按摩预约APP源码是一款家政服务类型的APP,可以帮忙用户在家就能享受按摩的服务。APP源码分两端,一端是用户端,另外一端是技师端。采用的技术,前端是安卓IOS,后端是PHP&…...
STL讲解——模拟实现vector
STL讲解——模拟实现vector vector深度剖析 在STL源码中,发现vector定义的并不是 start、size、capacity,而是start、finish、end_of_storage. 这样就可以得到size()和capacity()。 sizefinish-start capacityend_of_storage-start 扩容可能是本地扩容也…...
各种经典排序算法介绍及实现源码
一,冒泡排序(Bubble Sort) 排序算法是程序员必须了解和熟悉的一类算法,排序算法有很多种,基础的如:冒泡、插入、选择、快速、归并、计数、基数和桶排序等。 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求,如果不…...
历史大讲堂:这是真·图形化 苹果系统历史回顾(上)
众所周知,米国有个非常牛掰的公司叫苹果,想必大家对这个logo不陌生吧。 目前已发布的苹果产品有iPhone、iPad、iPod等等,简直花样繁多,而且各种功能很好用,我的手机就是一部苹果iPhone X。 等一下,似乎扯远…...
今天女神节,用python画个贺卡送给母亲吧
今天女神节,你给女神妈妈准备了什么祝福呢?如果还没有,那么画个贺卡送给她吧,在你眼里,她是一个什么样的人呢? 是"可爱",“温柔”,“美丽”,“漂亮”…...
【编程基础之Python】11、Python中的表达式
【编程基础之Python】11、Python中的表达式Python中的表达式表达式与运算符算术表达式赋值表达式比较表达式逻辑表达式位运算表达式总结Python中的表达式 在Python中,表达式是由操作数、运算符和函数调用等组成的语法结构,可以进行各种数学运算、逻辑判…...
华为OD机试真题Python实现【乱序整数序列两数之和绝对值最小】真题+解题思路+代码(20222023)
乱序整数序列两数之和绝对值最小 题目 给定一个随机的整数数组(可能存在正整数和负整数)nums, 请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值 并返回这两个数(按从小到大返回)以及绝对值。 每种输入只会对应一个答案。但是,数组中同一个元素不能使用两…...
字符串转换整数 (atoi)(python)
链接: https://leetcode.cn/problems/string-to-integer-atoi 题目描述: 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法…...
洛谷 P1115 最大子段和
题目链接:P1115 最大子段和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数,表示序列的长度 n。 第二行有 n 个整数ÿ…...
【Linux】-- 权限和Shell运行原理
目录 Shell的运行原理 用户切换 su - / su sudo 权限 chmod chown chgrp 八进制方法修改文件属性 目录权限 粘滞位 umask 自定义默认权限 Shell的运行原理 广义上,Linux发行版 Linux内核 外壳程序 Linux 从广义上来理解它是一个操作系统 而从狭义上…...
C++各类设计模式及实现详解
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书࿰…...
【Linux】进程理解与学习(Ⅰ)
环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅🌹相关文章推荐:【Linux】冯.诺依曼体系结构与操作系统进程概念什么是进程?进程是什么?我们打开任务管理器可以看到有…...
认识代码之前,请先认识你自己 |《编程人生》
这是我的湛庐课程《给技术人的职场突围课》 (链接) 的一部分。 这篇文章也是 IT 女神征文活动 的一部分。 《编程人生》是一本优秀程序员的采访集,里面记录了15位世界级编程大师的故事。 我在 发刊词 里面说过,在这个书单课里&am…...
react学习笔记-5:react路由
react旧版本路由 旧版本的路由是按照组件的方式来写的 编写router/index.tsx文件 import App from "../App" import Home from "../views/Home" import About from "../views/About" import { BrowserRouter,Routes,Route } from "react…...
[Python图像处理] 使用高通滤波器实现同态滤波
使用高通滤波器实现同态滤波同态滤波基础实现同态滤波相关链接同态滤波基础 同态滤波是一种去除图像中乘性噪声的技术,常用于校正图像中的不均匀照明。根据图像形成的光照反射模型,图像 f(x,y)f(x,y)f(x,y) 可以由以下两个分量表征: 入射到…...
PyTorch深度学习:60分钟入门
PyTorch深度学习:60分钟入门 本教程的目的: 更高层级地理解PyTorch的Tensor库以及神经网络。训练一个小的神经网络来对图像进行分类。 本教程以您拥有一定的numpy基础的前提下展开 Note: 务必确认您已经安装了 torch 和 torchvision 两个包。 这是一个基于Pytho…...
C语言指针常见问题汇总
我们在学C语言时,指针是我们最头疼的问题之一,针对C语言指针,博主根据自己的实际学到的知识以及开发经验,总结了以下使用C语言指针时常见问题。 1、指针做函数参数 学习函数的时候,讲了函数的参数都是值拷贝…...
Coremail邮件系统全新上线存档邮箱功能
邮箱积累邮件太多,搜索起来又慢又麻烦! 我的重要邮件忘记下载丢失了!14天自动删除太难了! 有没有可能重要邮件自动存档,解救一下“遗忘星”人? 在我们日常工作中,邮件是最经常使用的办公工具之一…...
终极免费文档下载指南:如何用kill-doc脚本轻松获取百度文库、豆丁网等30+平台资源
终极免费文档下载指南:如何用kill-doc脚本轻松获取百度文库、豆丁网等30平台资源 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档&a…...
抖音下载器底层架构解析:策略模式与异步编排的高性能实现
抖音下载器底层架构解析:策略模式与异步编排的高性能实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...
Sumi-e风格出图模糊、缺骨法、无气韵?手把手修复4类典型失败案例,含可复用的--s 800+ --style raw进阶参数包
更多请点击: https://intelliparadigm.com 第一章:Sumi-e风格在Midjourney中的本质困境与美学断层 水墨精神与扩散模型的结构性冲突 Sumi-e(日本水墨画)的核心在于“留白即墨、飞白见气、一笔三变”,其审美依赖于笔触…...
STM32实战:用HAL库搞定RS485 Modbus液压传感器数据采集(附自动收发电路避坑)
STM32实战:HAL库驱动RS485 Modbus液压传感器全流程解析 液压系统压力监测的稳定性往往取决于传感器数据采集的可靠性。在工业现场,RS485总线搭配Modbus RTU协议已成为液压传感器数据传输的黄金标准。本文将深入探讨基于STM32 HAL库的完整解决方案&#x…...
VR大空间项目屡获行业大奖,AI数字人公司赋能文旅智慧升级
在经历了早期的概念普及和单点试验后,AI数字人、VR、MR等技术正在文旅行业完成从“尝鲜”到“刚需”的蜕变。不再仅仅是博物馆或景区里的一块互动屏幕,而是一套能够重塑服务流程、活化文化IP、创造全新消费场景的完整解决方案。从边疆秘境到城市地标&…...
EmbBERT架构解析:面向TinyML的革新设计与优化
1. EmbBERT架构解析:面向TinyML的革新设计在边缘计算设备上部署自然语言处理模型一直面临内存和计算资源的双重限制。传统BERT模型即使经过压缩,其2MB版本在TinyNLP基准测试中平均准确率仅为83.93%,且激活内存占用高达1.5MB。EmbBERT通过三大…...
JPlag代码抄袭检测:17种编程语言的智能原创守护者
JPlag代码抄袭检测:17种编程语言的智能原创守护者 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag 在数字化教…...
终极指南:如何一键下载国家智慧教育平台电子课本PDF
终极指南:如何一键下载国家智慧教育平台电子课本PDF 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地址: …...
AI驱动的链上数据分析:Arkham工具实战与智能监控体系构建
1. 项目概述:一个面向链上数据的智能分析中枢如果你和我一样,在加密货币和Web3的世界里摸爬滚打了几年,你一定会对一个问题深有感触:链上数据浩如烟海,但真正能转化为有效决策的洞察却少之又少。我们每天面对着成千上万…...
AI与建模仿真融合:数字孪生从静态镜像到智能决策的演进
1. 项目概述:当AI遇见建模仿真,数字孪生正在经历什么?最近几年,无论是工业制造、智慧城市还是医疗健康,但凡提到数字化转型,总绕不开“数字孪生”这个词。它就像一个在虚拟世界里为物理实体打造的“克隆体”…...
