【问题标题】:What is the difference between == and === in JavaScript? [duplicate]JavaScript 中 == 和 === 有什么区别? [复制]
【发布时间】:2011-12-29 06:16:48
【问题描述】:
【问题讨论】:
标签:
javascript
equals-operator
identity-operator
【解决方案1】:
-
== 在测试它们是否相同之前尝试将它们转换为相同的类型。 "5" == 5
-
=== 不这样做;它要求对象具有相同的类型才能相等。 "5" !== 5
在这种情况下,结果是:
-
如果
x 是undefined 或null,x == undefined 将为真。
-
只有当
x 是undefined 时,x === undefined 才会为真。
如果您希望 undefined 和 null 被同等对待,您应该更喜欢第一种方法。一种常见的用法是可选的函数参数。
function greet(name, greeting) {
if (name == undefined) name = 'World';
if (greeting == undefined) greeting = 'Hello';
alert(greeting + ' ' + name);
}
greet(); // alerts "Hello World"
greet("Bob"); // alerts "Hello Bob"
greet(null, "Goodbye"); // alerts "Goodbye World"
【解决方案2】:
== 只是比较两个值,如果是不同的类型,则进行类型转换
=== 比较值及其类型 - 因此这里不会进行类型转换。
【解决方案3】:
假设我们有 x=5,
== 等于
x==8 为假
x==5 为真
=== 完全等于(值和类型)
x===5 为真
x==="5" 是假的
希望你理解这个概念
【解决方案4】:
=== 也会检查相同的类型。举几个例子就明白了:
(1 == '1') //Returns true
因为== 不关心类型,所以返回true。然而,如果你想要严格的类型检查,你会使用===,因为它返回true 只有如果它是相同的类型,并且是相同的值。
(1 === '1') //Returns false
(1 === 1) //Returns true
- 当两个字符串具有相同的字符序列、相同的长度和对应的字符时,它们是严格相等的
职位。
- 当两个数字在数值上相等(具有相同的数值)时,它们是严格相等的。 NaN 不等于任何东西,
包括 NaN。正零和负零彼此相等。
- 如果两个布尔操作数都为真或都为假,则两个布尔操作数严格相等。
- 如果两个对象引用同一个对象,则它们是严格相等的。
- Null 和 Undefined 类型是 ==(但不是 ===)。
Reference