可以使用双感叹号(!!
)来将变量转为为布尔值:
!!0 // false!!"" // false!!" " // true!!{} // true!![] // true!!true // true
if、else if、while、do/while 和 for 使用与 &&、||、! 相同的隐式类型转换方式(逻辑表达式) 。
下面是在 if 语句(逻辑上下文)中的隐式转换规则(绿色为true
,白色为false
):
文章插图
⑦ 总结除了下面这些之外的所有其他值都是真值,包括对象、数组、日期等 。甚至所有Symbol、空对象和数组都是真值 。
Boolean(''); // falseBoolean(0); // false Boolean(-0); // falseBoolean(NaN); // falseBoolean(null); // falseBoolean(undefined); // falseBoolean(false); // false
Boolean({}) // 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 规范中将数据类型转换为布尔值的规则:
文章插图
ECMAScript 规范:https://262.ecma-international.org/5.1/#sec-9.2
(3)数字转换将数据类型转换为数字称为数字转换,可以使用
Number()
、parseInt()
、parseFloat()
等方法将数据类型显式转换为数字 。当一个值不能被强制转换为一个数字时 , 就会返回 NaN
。① 字符串 => 数字:当把字符串转换为数字时,JavaScript 引擎首先会修剪前导和后置空格、
n
、t
字符,如果修剪后的字符串不代表有效数字,则返回 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
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 屋里有蟑螂怎么彻底根除 屋里有蟑螂怎么消灭掉
- 二字网名超拽霸气 二字网名超拽霸气冷酷类型
- 童谣彻底颠覆自己的形象,黑色丝袜搭配双排风衣大秀模特气息!
- 手机频繁提示升级更新?教你一招,彻底关闭它
- Lisa再次作妖?被路易威登彻底抛弃,各国粉丝追着骂
- 刘亦菲彻底告别少女时代,肉色丝袜搭配银星连衣裙女人味十足!
- 韩红的“黑脸”,让《声生不息》节目组彻底被打脸
- 一味山楂健康减肥,不同肥胖类型的配伍秘方!轻松瘦身喝出来!
- 这次连沈腾都遭殃了,彻底触碰到了“底线”,贾玲不加入是正确的
- 心酸!云昊开播带货时聊学历遗憾,二八事件彻底改变人生轨迹