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

时间:2011-11-10 18:29:29

标签: javascript

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

  

11.9.6严格的等式比较算法

     

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

     
      
  1. 如果Type(x)与Type(y)不同,则返回false。
  2.   
  3. 如果Type(x)为Undefined,则返回true。
  4.   
  5. 如果Type(x)为Null,则返回true。
  6.   
  7. 如果Type(x)是Number,那么   
        
    1. 如果x为NaN,则返回false。
    2.   
    3. 如果y为NaN,则返回false。
    4.   
    5. 如果x与y的数字值相同,则返回true。
    6.   
    7. 如果x为+0且y为-0,则返回true。
    8.   
    9. 如果x为-0且y为+0,则返回true。
    10.   
    11. 返回false。
    12.   
  8.   
  9. 如果Type(x)是String,则如果x和y完全相同的字符序列(相同的长度和相同的字符),则返回true   相应的职位);否则,返回false。
  10.   
  11. 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true;否则,返回false。
  12.   
  13. 如果x和y引用同一个对象,则返回true。否则,返回false。注意此算法与SameValue算法不同(9.12)   处理有符号的零和NaNs
  14.   

粗体部分是什么意思?你怎么写出一些JavaScript来确认呢? 我试过了alert(typeof(undefined) === 'x');,但它给了我false

3 个答案:

答案 0 :(得分:4)

在此之前它说:

  

其中xy是值

首先,请提供xy值。

然后忘记“等等”,1很重要。 xy必须是相同类型才能通过第1步。

步骤2是“如果Type(x)未定义,则返回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运算符无法告诉我们某些内容是否为null,因此如果不使用===,则无法完全实现该算法。但是,由于我们有===,因此我们不需要。

答案 1 :(得分:2)

我的解释是将规范作为正式证据阅读,其中数字2和3取决于第一条规则:

  
      
  1. 如果Type(x)与Type(y)不同,则返回false。
  2.   

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

(null) === (null)

返回true。这同样适用于Undefined

答案 2 :(得分:1)

Type()是一种内部方法,在您的javascript代码中不可用。 typeof运算符完全相同。

xy指的是===的左手和右手操作数。它们不是字符串'x''y'

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