[英]ECMA-262 === algorithm explanation
我试图了解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;否则,返回true。 否则,返回false。
- 如果Type(x)为布尔值,则如果x和y均为true或均为false,则返回true;否则,返回false。 否则,返回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 m中进行测试。 有人可以解释在这种情况下到底发生了什么吗?
您必须按顺序进行操作, If Type(x) is different from Type(y), return false.
。 由于已经返回false,因此它永远不会指向点2或3。
考虑1: If Type(x) is different from Type(y), return false.
,
t1 === t2
实际上应该返回false。
t1
是undefined
,而t2
是数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.