为什么javascript松散的平等与真实的测试不一样?

时间:2014-01-23 21:22:05

标签: javascript

在javascript中,检查变量是否设置的一种(公认的草率)方法是检查它是否是“真实的”,

var blah;

blah = "foo"; // in real code, this assignment might happen only sometimes

if(blah) {
  console.log('blah is set'); 
}

我原以为“宽松”的平等算子等同于真正的测试。然后,结果表达式"foo" == true评估为false

1 个答案:

答案 0 :(得分:1)

if( expression )使用转换确定相等性时,

x == y会检查是否真实。它的概念并不完全相同。

转化详情请见MDN。对于==

  

如果两个操作数的类型不同,则JavaScript会转换   操作数,然后应用严格的比较。如果任一操作数是a   如果是数字或布尔值,操作数将转换为数字   可能;否则,如果任一操作数是字符串,则字符串操作数为   如果可能,转换为数字。如果两个操作数都是对象,那么   JavaScript比较操作数时相同的内部引用   在内存中引用相同的对象。

基于此,"foo" == true相当于NaN === 1并且为假。