。
② 布尔值 => 数字:当使用 Number() 将布尔值转化为数字时,true 会转化为 1,false 会转化为 0 。
Number(true); // 1Number(false); // 0③ null => 数字:当使用 Number() 将 null 转化为数字时,会返回 0:
Number(null); // 0null + 5; // 5④ undefined / 数组 / 对象 / NaN => 数字:当使用 Number() 将 undefined、数组、对象、NaN 转化为数字时,会返回 NaN:
Number(undefined); // NaNNumber([1, 2, 3]) // NaNNumber({}) // NaNNumber(NaN) // NaN⑤ 数组元素可以使用map遍历数组元素,并使用需要的类型来进行类型转换:
["1", "9", "-9", "0.003", "yes"].map(Number);// 输出结果:[1, 9, -9, 0.003, NaN]⑥ 特殊规则在表达式中,当我们将 == 运算符应用于 null 或 undefined 时,不会发生数字转换 。此外,null 只等于 null 或 undefined,不能等于其他任何值:
null == null; // true null == 0; // falsenull == undefined; // trueundefined == undefined // true根据运算符优先级,+ 运算符具有从左到右的关联性,因此如果有一个表达式 2 + 3 + '4' + 'number' ,则操作按以下方式完成:
2 + 3 + '4' + 'number'==> 5 + '4' + 'number'// 数字 5 被隐式转换为字符串,然后连接起来==> '54' + 'number'==> '54number'NaN 不等于任何其他类型,甚至它本身:
NaN == NaN // false⑦ 总结上面的例子中,可以清楚地看到一些意想不到的结果:将 null 转换为数字时返回了 0,而将 undefined 转换为数字返回了 NaN 。两个操作都应该返回 NaN,因为这两种值类型显然都不是有效的数字,将空字符串转换为数字时也返回了 0 。
下面是 ECMAScript 规范中将数据类型转换为字符串的规则,清楚的解释了上面的异常现象:

文章插图

文章插图
ECMAScript 规范:https://262.ecma-international.org/5.1/#sec-9.3
3. Symbol 类型转换Symbol 只能进行显式转换,不能进行隐式转换 。也就是说,Symbol不能被强制转换为字符串或数字 , 这样它们就不会被意外地用作本来应该表现为 Symbol 的属性 。
const mySymbol = Symbol.for("mySymbol");const str = String(mySymbol);console.log(str); // 'Symbol(mySymbol)'当使用 console.log() 来打印 symbol 时,它之所以有效 , 是因为 console.log() 在 symbol 上调用了 String() 方法以创建可用的结果 。
如果尝试直接使用字符串连接 symbol,它将抛出TypeError:
const mySymbol = Symbol.for("mySymbol");const sum = mySymbol + "";console.log(sum); // Uncaught TypeError: Cannot convert a Symbol value to a string将 mySymbol 连接到字符串需要首先将
推荐阅读
- 屋里有蟑螂怎么彻底根除 屋里有蟑螂怎么消灭掉
- 二字网名超拽霸气 二字网名超拽霸气冷酷类型
- 童谣彻底颠覆自己的形象,黑色丝袜搭配双排风衣大秀模特气息!
- 手机频繁提示升级更新?教你一招,彻底关闭它
- Lisa再次作妖?被路易威登彻底抛弃,各国粉丝追着骂
- 刘亦菲彻底告别少女时代,肉色丝袜搭配银星连衣裙女人味十足!
- 韩红的“黑脸”,让《声生不息》节目组彻底被打脸
- 一味山楂健康减肥,不同肥胖类型的配伍秘方!轻松瘦身喝出来!
- 这次连沈腾都遭殃了,彻底触碰到了“底线”,贾玲不加入是正确的
- 心酸!云昊开播带货时聊学历遗憾,二八事件彻底改变人生轨迹
