在JavaScript中,“==”和“===”有什么区别?我还看到过“!=”和“!==”运算符。是否还有其他类似的运算符?
看这里:http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html
三个等于号表示“不进行类型转换的相等比较”。使用三个等于号时,值的类型也必须相等。
0 == false // true
0 === false // false, because they are of a different type
1 == "1" // true, automatic type conversion for value only
1 === "1" // false, because they are of a different type
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
s1
和s2
,则每个对象上的“valueOf()”方法都将返回一个字符串原语,并且s1.valueOf() === s2.valueOf()
将返回“true”。 - danorton===
和 !==
是严格比较运算符:
JavaScript有严格和类型转换的相等比较。对于严格相等性, 被比较的对象必须具有相同的类型并且:
- 当两个字符串具有相同的字符序列,相同的长度和相应位置的相同字符时,则两个字符串严格相等。
- 当两个数字在数值上相等(具有相同的数值)时,它们是严格相等的。
NaN
不等于任何东西,包括NaN
。正零和负零彼此相等。- 如果两个布尔操作数都为true或都为false,则它们是严格相等的。
- 如果它们引用同一个
Object
,则两个对象是严格相等的。null
和undefined
类型是==
(但不是===
)。[即 (null == undefined
) 为 true,但 (null === undefined
) 为 false]
if (input == null) ...
,那么当 input 是 undefined 时,这个条件是否也会成立呢? - Filip Vondrášeknew String()===new String()
返回false(不同的对象引用)。不过,无论如何应该避免使用new String
。 - Matt Browne
==
是带有类型转换(也称为强制转换)的===
。要真正理解我的意思,您可以查看此 JavaScript 函数,该函数的行为与==
完全相同:https://dev59.com/Z3RC5IYBdhLWcg3wROpQ#38856418 - Luis Perez==
的可能令人惊讶的例子。 - ToolmakerSteve==
),也被称为“如果类型相同则严格比较,否则将null、undefined、以及document.all视为相等,但如果涉及到字符串和数字或bigint,则将字符串强制转换为对应的数值类型;如果涉及布尔型,则将其转换为数字;如果涉及对象,则将其转换为原始值;如果涉及数值类型,则使用不同的无穷大和NaN值进行比较,重复以上步骤直到比较完成”。 - Sebastian Simon