简单解释就是 === 先比较类型,再比较值。 因为 js 中没有整数和浮点数,只有 number 类型。 typeof 1.0; // "number" typeof 1; // "number" 因此 1.0 和 1 的类型是相同的。 然后比较值,很显然两者也是相同的。 复杂的解释就是看规范: 如果 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) 结果为 Boolean,如果 x 与 y 都为 true 或 false,则返回 true,否则,返回 false 如果 x 和 y 引用到同一个 Object 对象,返回 true,否则,返回 false 重要段落我加粗了。
简单解释就是
===
先比较类型,再比较值。因为 js 中没有整数和浮点数,只有
number
类型。因此
1.0
和1
的类型是相同的。然后比较值,很显然两者也是相同的。
复杂的解释就是看规范:
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)
结果为Boolean
,如果x
与y
都为true
或false
,则返回true
,否则,返回false
x
和y
引用到同一个Object
对象,返回true
,否则,返回false
重要段落我加粗了。