据我所知,在JavaScript中,!!运算符可以将其他类型的值转换为布尔类型,并将其规范化为true或false。这意味着"0"会转换为布尔值true。另一方面,如果我将它与false比较,结果为true,实际上是false。我错过了什么规则?我已经在IE和Opera中测试过了。
==
运算符检查松散相等性,与真值无关。
具体来说,它将操作数转换为数字,然后比较数字。
包含数字的字符串转换为它们所包含的数字;布尔值转换为 0
和 1
。
对象通过调用 valueOf
来进行转换(如果已被定义)。
因此,以下所有语句均为真:
"1" == 1
"0" == false
"1" == true
"2" != true
"2" != false
({ valueOf:function() { return 2; } }) == 2
({ valueOf:function() { return 1; } }) == true
字符串对于第二个表达式,在尝试比较不同数据类型的值时,JavaScript将执行类型强制转换。Douglas Crockford说这是一个不好的特性this is a misfeature。如果你使用
如果参数是空字符串(长度为零),则结果为false;否则结果为true。
===
而不是 ==
,它将会是false。规则相当复杂,因此你应该直接查看ECMA-262的第11.9.3节以获取详细信息。