在JavaScript规范中:http://www.ecma-international.org/publications/standards/Ecma-262.htm
11.9.6严格的等式比较算法
比较x === y,其中x和y是值,产生true或 假。这样的比较如下进行:
- 如果Type(x)与Type(y)不同,则返回false。
- 如果Type(x)为Undefined,则返回true。
- 如果Type(x)为Null,则返回true。
- 如果Type(x)是Number,那么
- 如果x为NaN,则返回false。
- 如果y为NaN,则返回false。
- 如果x与y的数字值相同,则返回true。
- 如果x为+0且y为-0,则返回true。
- 如果x为-0且y为+0,则返回true。
- 返回false。
- 如果Type(x)是String,则如果x和y完全相同的字符序列(相同的长度和相同的字符),则返回true 相应的职位);否则,返回false。
- 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true;否则,返回false。
- 如果x和y引用同一个对象,则返回true。否则,返回false。注意此算法与SameValue算法不同(9.12) 处理有符号的零和NaNs
醇>
粗体部分是什么意思?你怎么写出一些JavaScript来确认呢?
我试过了alert(typeof(undefined) === 'x');
,但它给了我false
。
答案 0 :(得分:4)
在此之前它说:
其中
x
和y
是值
首先,请提供x
和y
值。
然后忘记“等等”,1很重要。 x
和y
必须是相同类型才能通过第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取决于第一条规则:
- 如果Type(x)与Type(y)不同,则返回false。
醇>
由于您在步骤2并且未返回false
,因此X的类型必须与Y的类型相同,因此它检查的条件是:
(null) === (null)
返回true
。这同样适用于Undefined
答案 2 :(得分:1)
Type()
是一种内部方法,在您的javascript代码中不可用。 与typeof
运算符完全相同。
x
和y
指的是===
的左手和右手操作数。它们不是字符串'x'
和'y'
。