alert([0]==false);//true!!!
if([0])
alert('1');
else
alert("2");
//竟然返回'1' ????????
alert([0]==false);//true!!!
if([0])
alert('1');
else
alert("2");
//竟然返回'1' ????????
这个就是===与==的区别了,==是不检测类型是不是一致,只要值相等就可以了。[0]代表数组。js存在着隐式转换,数组的值是0,0又代表boolean值的false所以返回true。而if([0])这个事判断数组是否为空,显然数组是有值的,值为零,所以返回true;
Javascript 完整比较表。红色:===;橙色:==;黄色:<= 和 >= 同时成立,== 不成立;蓝色:只有 >=;绿色:只有 <=。
来自:belleveinvis
相关:
1 回答856 阅读✓ 已解决
1 回答1.1k 阅读
2 回答775 阅读
2 回答620 阅读
2 回答607 阅读
1 回答681 阅读
2 回答520 阅读
ECMAScript在不严格相等出指明了
对于
x == y,所以 [0] == false 将等价于
[0] == Number(false)至于ToPrimitive([0])是内部方法 ToPrimitive(input[,PreferredType])的调用
ToPrimitive(input[,PreferredType]):
于是 hint = 'number'
OrdinaryToPrimitive(input,hint):
所以最终 [0] == false 等价于
Number([0].toString()) == Number(false)应用的规则,先是
x == y的第9条,然后是x == y的第11条,最后才是第7条。ECMAScript关于
x == y的说明,以及内部操作的说明很多,这里说不完,只取了能说明你这个问题的相关规则,原文可以去官网再读。写完了,才发现你的问题不是这个,if(x)始终等价于 if(Boolean(x)),而任何非null的引用类型(Array, Object, Function)都是true。