Javascript:说明如果Type(x)未定义,则返回true。如果Type(x)为Null,则返回true

Ray*_*eng 4 javascript

在JavaScript规范中:http : //www.ecma-international.org/publications/standards/Ecma-262.htm

11.9.6严格相等比较算法

比较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,则
    1. 如果x为NaN,则返回false。
    2. 如果y为NaN,则返回false。
    3. 如果x与y相同,则返回true。
    4. 如果x为+ 0,y为-0,则返回true。
    5. 如果x为-0,y为+0,则返回true。
    6. 返回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。注意:此算法与SameValue算法(9.12)的区别在于对有符号零和NaN的处理

粗体部分是什么意思?您如何编写一些JavaScript进行确认?我试过了,alert(typeof(undefined) === 'x');但这给了我false

Que*_*tin 5

在此之前它说:

其中,xy是值

因此,首先给予xy值。

然后忘记“ blah”,1很重要。x并且y必须使用相同的类型才能通过步骤1。

步骤2是“如果Type(x)未定义,则返回true。”。

只有一个提供未定义类型的值undefined。因此,测试步骤2的唯一方法(未分配undefined变量):

alert(undefined === undefined)
Run Code Online (Sandbox Code Playgroud)

……会成真。

步骤3的工作方式完全相同。唯一的空值是null

alert(null === null)
Run Code Online (Sandbox Code Playgroud)

手动执行该算法将如下所示:

function equalsequalsequals(x, y)
if (typeof x != typeof y) {
    return false;
} else if (typeof x == "undefined") {
    return true;
} // …
Run Code Online (Sandbox Code Playgroud)

typeof运算符无法告诉我们某些内容是否为null,因此如果不使用,就无法完全实现该算法===。既然有了===,但是我们不需要。