如下面的代码:
var a = ""; // false
var b = " "; // false
var c = []; // false
var d = [0]; // false
var e = [1]; // true
var f = {}; // false
var g = {a:0}; // false
var h = {b:1}; // false
var j; // false
var k = null; // false
if (a) {console.log('a')}
if (b) {console.log('b')} // 成功打印
if (c) {console.log('c')} // 成功打印
if (d) {console.log('d')} // 成功打印
if (e) {console.log('e')} // 成功打印
if (f) {console.log('f')} // 成功打印
if (g) {console.log('g')} // 成功打印
if (h) {console.log('h')} // 成功打印
if (j) {console.log('j')}
if (k) {console.log('k')}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
调用if会调用这个ToBoolean,==并不是呀
因为规则就是不一样啊。
==会转化为数字进行比较
[]==true比的其实是0==1;
if则是强行转化为布尔值
[]是个数组,确切存在,所以就是true,可以这么理解。
具体的规则,我也记不大清,你可以去查一下。
if判断的时候,如果传入的不是boolean类型的值(或表达式),js引擎会把你的变量转成boolean类型的变量。比如,if(0)判断是否定的,是因为Boolean(0)的值为false,而if(1),if(2),if(不等于0和NaN的数)都等价于if(true)是应为Boolean(不等于0和NaN)的值为true。但是==操作符则不同,它的规则比较复杂,这里举个简单的例子。if(true==1)会被判定为真,但是if(true==2)就会被判定为假。因为对于==操作符,true和一个Number类型的值比较的话,它只能等于1,而Boolean(a)中只要a不为零即为真。关于==操作符,推荐一篇文章:一张图彻底搞懂JavaScript的==运算,希望能帮到你。==判断会先把各种类型转换成数字类型 而if则会把各种类型转换成布尔值 下图是各类型与数字和布尔值的关系
除了NAN, false, "", null, undefined, 其余都是true
什么意思,说详细点