繁体   English   中英

ECMA-262 ===算法说明

[英]ECMA-262 === algorithm explanation

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

比较x === y(其中x和y是值)会产生true或false。 这样的比较执行如下:

  1. 如果Type(x)与Type(y)不同,则返回false。
  2. 如果Type(x)为Undefined,则返回true。
  3. 如果Type(x)为Null,则返回true。
  4. 如果Type(x)是Number,则
    • 如果x为NaN,则返回false。
    • 如果y为NaN,则返回false。
    • 如果x与y相同,则返回true。
    • 如果x为+ 0,y为−0,则返回true。
    • 如果x为-0,y为+0,则返回true。
    • 返回false。
  5. 如果Type(x)为String,则如果x和y是完全相同的字符序列(相同的长度和相同位置的相同字符),则返回true;否则,返回true。 否则,返回false。
  6. 如果Type(x)为布尔值,则如果x和y均为true或均为false,则返回true;否则,返回false。 否则,返回false。
  7. 如果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。

t1undefined ,而t2是数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM