彻底搞懂 JS 类型转换( 四 )

可以使用双感叹号(!!)来将变量转为为布尔值:
!!0    // false!!""   // false!!" "  // true!!{}   // true!![]   // true!!true // trueif、else if、while、do/while 和 for 使用与 &&、||、! 相同的隐式类型转换方式(逻辑表达式) 。
下面是在 if 语句(逻辑上下文)中的隐式转换规则(绿色为true,白色为false):

彻底搞懂 JS 类型转换

文章插图
⑦ 总结除了下面这些之外的所有其他值都是真值,包括对象、数组、日期等 。甚至所有Symbol、空对象和数组都是真值 。
Boolean('');        // falseBoolean(0);         // false     Boolean(-0);        // falseBoolean(NaN);       // falseBoolean(null);      // falseBoolean(undefined); // falseBoolean(false);     // falseBoolean({})             // trueBoolean([])             // trueBoolean(Symbol())       // trueBoolean(function() {})  // true可以通过以下方式来过滤数组中的假值:
[0, "", " ", null, undefined, NaN].map(Boolean); // 输出结果:[false, false, true, false, false, false]我们可以会遇到一种情况 , 当使用 5 == true 时,结果为false,而使用if(5) {}时 , 则 5 被认为是 true 并进入if/else语句:
5 == true;  // falseif (5) {    console.log('5');  // 5};这种情况下,即一个值和数字进行比较时 , JavaScript 会试图将这个值转换为数字 。所以,当比较5 == true 时,JavaScript 倾向于将true转换为1 , 因为 1不等于5,因此结果为 false 。而在if(5) {}的情况下,5 被转换为布尔值,而 5 是一个真值,所以它进入if块 。在这种情况下 , 可以选择显式转换以避免错误,因为 5 是一个真值,可以执行Boolean(5) == true , 这样就会返回true了 。
下面是 ECMAScript 规范中将数据类型转换为布尔值的规则:

彻底搞懂 JS 类型转换

文章插图

ECMAScript 规范:https://262.ecma-international.org/5.1/#sec-9.2
(3)数字转换将数据类型转换为数字称为数字转换,可以使用Number()parseInt()parseFloat()等方法将数据类型显式转换为数字 。当一个值不能被强制转换为一个数字时 , 就会返回 NaN
① 字符串 => 数字:当把字符串转换为数字时,JavaScript 引擎首先会修剪前导和后置空格、nt 字符,如果修剪后的字符串不代表有效数字,则返回 NaN 。如果字符串为空,则返回 0 。
Number('123');            // 123Number("-12.34")          // -12.34Number("12s");            // NaNNumber("n")              // 0parseInt(' 203px');       // 203 parseInt('10.000')        // 10   parseInt('10.20')         // 10 parseFloat('203.212px');  // 203.212parseFloat('10.20')       // 10.2parseFloat('10.81')       // 10.81可以看到 , parseInt 函数会从字符串中读取一个数字并删除它后面所有字符,但是如果数字前面有字符(空格除外),那么它将输出 NaN


推荐阅读