解释如果Type(x)是Undefined,返回true.如果Type(x)为Null,则返回true

Javascript: Explain If Type(x) is Undefined, return true. If Type(x) is Null, return true

本文关键字:返回 true Type 如果 Null 解释 Undefined      更新时间:2023-09-26

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

11.9.6严格相等比较算法

比较x === y,其中x和y是值,产生真或假的。这样的比较执行如下:

  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是相同的Number值,返回true。
    4. 如果x为+0,y为-0,返回true。
    5. 如果x为-0,y为+0,返回true。
    6. 返回false。
  5. 如果Type(x)是String,那么如果x和y是完全相同的字符序列(相同的长度和相同的字符),则返回true相应的位置);
  6. 如果Type(x)是布尔值,如果x和y都为真或都为假则返回真;
  7. 如果x和y引用同一对象则返回true。否则,返回false。该算法与SameValue algorithm(9.12)不同。对有符号零和nan的处理

加粗的部分是什么意思?您如何编写一些JavaScript来确认它?我试过alert(typeof(undefined) === 'x');,但它给我false

前面写着:

其中xy为值

首先,给出xy的值。

那就忘了"废话"吧,1是重要的。xy必须是相同的类型才能通过步骤1。

步骤2是"If Type(x) is Undefined, return true."

只有一个值给出了未定义的类型,undefined。因此,测试步骤2(没有将undefined赋值给变量)的唯一方法是:

alert(undefined === undefined)

…将为真。

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

alert(null === null)

算法的手动实现将像这样开始:

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

typeof运算符不能告诉我们某项是否为空,所以如果不使用===,就不能完全实现该算法。因为我们有===,但是,我们不需要。

我的解释是将规范视为一种形式证明,让数字2和3依赖于第一条规则:

  1. 如果Type(x)和Type(y)不一致,返回false。

由于您在第2步并且没有返回false,因此X的类型必须与Y的类型相同,因此它检查的条件是:

(null) === (null)

返回trueUndefined

也是如此

Type()是一个内部方法,在javascript代码中不可用。不是typeof操作符相同。

xy分别为===的左、右操作数。它们不是字符串'x''y'

http://es5.github.com/x11.9.6