ECMA-262 ===算法解释

时间:2011-11-04 16:49:27

标签: javascript

我试图了解JavaScript中===运算符的确切算法。它被定义为类似

  

比较x === y,其中x和y是值,产生true或false。这样的比较如下进行:

     
      
  1. 如果Type(x)与Type(y)不同,则返回false。
  2.   
  3. 如果Type(x)为Undefined,则返回true。
  4.   
  5. 如果Type(x)为Null,则返回true。
  6.   
  7. 如果Type(x)是Number,那么   
        
    • 如果x为NaN,则返回false。
    •   
    • 如果y为NaN,则返回false。
    •   
    • 如果x与y的数字值相同,则返回true。
    •   
    • 如果x为+0且y为-0,则返回true。
    •   
    • 如果x为-0且y为+0,则返回true。
    •   
    • 返回false。
    •   
  8.   
  9. 如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的长度和字符相同),则返回true;否则,返回false。
  10.   
  11. 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true;否则,返回false。
  12.   
  13. 如果x和y引用同一个对象,则返回true。否则,返回false。
  14.   

现在我写的是

var t1 = undefined,t2 = 2;
typeof(t1); //"undefined"
typeof(t2); //"number"

t1 === t2; //returns false ?????

考虑第2点和第3点:它应该返回true。 我在Chrome 15.0.874.106米测试它。有人可以解释一下这种情况到底发生了什么吗?

2 个答案:

答案 0 :(得分:8)

你必须按顺序进行,If Type(x) is different from Type(y), return false.。由于已经返回false,因此它永远不会到达第2点或第3点。

答案 1 :(得分:1)

考虑1: If Type(x) is different from Type(y), return false.
t1 === t2确实应该返回false。

t1undefined,而t2为数字。