在JavaScript规范中:http : //www.ecma-international.org/publications/standards/Ecma-262.htm
11.9.6严格相等比较算法
比较x === y(其中x和y是值)会产生true或false。这样的比较执行如下:
- 如果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;否则,返回true。否则,返回false。
- 如果Type(x)为布尔值,则如果x和y均为true或均为false,则返回true;否则,返回false。否则,返回false。
- 如果x和y指向同一对象,则返回true。否则,返回false。注意:此算法与SameValue算法(9.12)的区别在于对有符号零和NaN的处理
粗体部分是什么意思?您如何编写一些JavaScript进行确认?我试过了,alert(typeof(undefined) === 'x');但这给了我false。
在此之前它说:
其中,
x和y是值
因此,首先给予x和y值。
然后忘记“ 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,因此如果不使用,就无法完全实现该算法===。既然有了===,但是我们不需要。