if([] == false) alert('empty array is false');
alert(+[]) // alert 0
if([]) alert('empty array is true');
他们都会运行警报
Demo http://jsfiddle.net/roine/ZFDXY/
这里当前的两个答案都是正确的,但我想根据以下内容添加更详细的解释语言规范 http://es5.github.com/。造成明显矛盾的结果的原因是if
语句和相等比较的评估方式不同。
如果是if(expression)
声明,表达进行求值,然后转换为布尔类型 (§ 12.5 http://es5.github.com/#x12.5)。数组是对象,当对象转换为布尔值时,结果始终是true
(§ 9.2 http://es5.github.com/#x9.2).
平等比较==
遵循一组不同的规则,详细信息§ 11.9.3 http://es5.github.com/#x11.9.3。比较可能需要多次类型转换,直到两个操作数的类型相同。操作数的顺序也很重要。根据该算法,我们可以看到比较[] == false
实际上是四步操作:
-
由于涉及布尔值,因此首先将其转换为数字(算法的第 7 步)。所以就变成了:
[] == 0
-
然后数组被转换为其原始值(参见§ 9.1 http://es5.github.com/#x9.1 and § 8.12.8 http://es5.github.com/#x8.12.8),并变为空字符串(步骤 9)。所以:
"" == 0
-
将字符串与数字进行比较时,首先将字符串转换为数字(步骤 5,遵循§ 9.3.1 http://es5.github.com/#x9.3.1):
0 == 0
- 现在我们有两个数字,比较结果为
true
根据步骤 1.c.iii。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)