我试图了解JavaScript中===运算符的确切算法。它被定义为类似
比较x === y,其中x和y是值,产生true或false。这样的比较如下进行:
- 如果Type(x)与Type(y)不同,则返回false。
- 如果Type(x)为Undefined,则返回true。
- 如果Type(x)为Null,则返回true。
- 如果Type(x)是Number,那么
- 如果x为NaN,则返回false。
- 如果y为NaN,则返回false。
- 如果x与y的数字值相同,则返回true。
- 如果x为+0且y为-0,则返回true。
- 如果x为-0且y为+0,则返回true。
- 返回false。
- 如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的长度和字符相同),则返回true;否则,返回false。
- 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true;否则,返回false。
- 如果x和y引用同一个对象,则返回true。否则,返回false。
醇>
现在我写的是
var t1 = undefined,t2 = 2;
typeof(t1); //"undefined"
typeof(t2); //"number"
t1 === t2; //returns false ?????
考虑第2点和第3点:它应该返回true。 我在Chrome 15.0.874.106米测试它。有人可以解释一下这种情况到底发生了什么吗?
答案 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。
t1
为undefined
,而t2
为数字。