JavaScript中"=="和"==="有什么区别?

7

Dup: https://dev59.com/BHI95IYBdhLWcg3w1Bro#2132895 - Sarfraz
@deceze 情境各异... - Exception
@user https://dev59.com/AXRA5IYBdhLWcg3w8SiJ 看看这篇文章。 - deceze
== 不检查数据类型,而 === 会检查数据类型。 - Alekya
4个回答

20
  • == 试图在测试它们是否相同之前将值转换为相同的类型。 "5" == 5
  • === 不会进行类型转换,它要求对象必须是相同类型才视为相等。 "5" !== 5

在这种情况下,结果是:

  • 如果 xundefinednull,则 x == undefined 将返回 true。
  • 只有当 xundefined 时,x === undefined 才会返回 true。

如果你希望将 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"

9

假设我们有x=5,

== 表示相等

x==8 是错误的 x==5 是正确的

=== 表示完全相等(值和类型)

x===5 是正确的 x==="5" 是错误的

希望您理解这个概念。


8

===也会检查类型是否相同。通过以下几个例子,您将理解:

(1 == '1') //Returns true

由于 == 不考虑类型,所以会返回 true。然而,如果你想进行严格的类型检查,你应该使用 ===,因为它只有在相同类型和相同值的情况下才会返回 true。

(1 === '1') //Returns false
(1 === 1) //Returns true

两个字符串当且仅当它们具有相同的字符序列、相同的长度和相应位置上的相同字符时,它们是严格相等的。两个数字在数值上相等(具有相同的数值)时,它们是严格相等的。NaN不等于任何东西,包括它自己。正零和负零彼此相等,两个布尔操作数如果都为 true 或 false,则它们是严格相等的。两个对象引用相同的对象时才是严格相等的。Null 和 Undefined 类型是 == (但不是 ===)。参考:链接

7

== 只是比较两个值,如果它们是不同类型的,就会进行类型转换。

=== 比较值和类型 - 因此这里不会进行类型转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接