Javascript ECMA-262===算法说明

Javascript ECMA-262===算法说明,javascript,Javascript,我试图理解JavaScript中===运算符的精确算法。它被定义为 var t1 = undefined,t2 = 2; typeof(t1); //"undefined" typeof(t2); //"number" t1 === t2; //returns false ????? 比较x===y,其中x和y是值,生成true或false。这样的比较如下所示: 如果类型(x)与类型(y)不同,则返回false 如果类型(x)未定义,则返回true 如

我试图理解JavaScript中===运算符的精确算法。它被定义为

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

t1 === t2; //returns false ?????
比较x===y,其中x和y是值,生成true或false。这样的比较如下所示:

  • 如果类型(x)与类型(y)不同,则返回false
  • 如果类型(x)未定义,则返回true
  • 如果类型(x)为Null,则返回true
  • 如果类型(x)为数字,则
    • 如果x为NaN,则返回false
    • 如果y为NaN,则返回false
    • 如果x与y的数值相同,则返回true
    • 如果x为+0,y为−0,返回true
    • 如果x是−0且y为+0,返回true
    • 返回false
  • 如果类型(x)是字符串,那么如果x和y是完全相同的字符序列(相同的长度和对应位置的相同字符),则返回true;否则,返回false
  • 如果类型(x)为布尔值,则如果x和y均为真或均为假,则返回真;否则,返回false
  • 如果x和y引用同一对象,则返回true。否则,返回false
  • 现在如果我写一些类似的东西

    var t1 = undefined,t2 = 2;
    typeof(t1); //"undefined"
    typeof(t2); //"number"
    
    t1 === t2; //returns false ?????
    
    考虑第2点和第3点:它应该返回true。
    我正在测试它在铬15.0.874.106米。有人能解释一下这种情况下到底发生了什么吗?

    考虑到
    1:如果类型(x)与类型(y)不同,则返回false。

    t1==t2
    确实应该返回false


    t1
    未定义的
    ,而
    t2
    是一个数字。

    您必须按顺序执行,
    如果类型(x)与类型(y)不同,则返回false。
    。由于已经返回false,它永远不会到达第2点或第3点。

    这意味着
    未定义===
    将产生true。第二步仅在两个值都
    未定义时执行。