Javascript中的等于运算符

在javascript语法中,有两个可用于比较变量是否相等或相同的运算符,”==”和”===”。如果不理解每一个的特点,就容易在程序中产生一些莫名其妙的错误。

案例比较

先来看几个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ('' == 0) {
console.log('blank equals zero')
}

if ('0' == 0) {
console.log('string - 0 equlas zero')
}

if (null == undefined) {
console.log('null eqauls undefined')
}

if ('2.0' == 2) {
console.log('string 2.0 equals 2')
}

运行这段代码,输出为:

1
2
3
4
blank equals zero
string - 0 equlas zero
null eqauls undefined
string 2.0 equals 2

可以看到以上条件全部成立。

但如果把 “==” 换成 “===” 呢? 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ('' === 0) {
console.log('blank equals zero')
}

if ('0' === 0) {
console.log('string - 0 equlas zero')
}

if (null === undefined) {
console.log('null eqauls undefined')
}

if ('2.0' === 2) {
console.log('string 2.0 equals 2')
}

可以看到以上的表达式全部都不成立了(返回 false)。

原生数据类型的比较

实际上,在javascript中, “==” 叫相等运算符, “===” 叫严格运算符,仔细比较以上的示例,我们可以发现,”===”和”==”主要区别在于面对不同数据类型时会有不同的表现:

“===” 会首先比较数据类型是否相同,如果不同,则直接返回 false, 如果相同,再近一步比较值

“==” 会首先比较数据类型是否相同,如果不同,则进行类型转换,先转为一样的数据类型,再进一步比较值。

复合数据类型的比较

对于复合数据类型的变量(比如对象,函数,数组等),”===”和”==”比较的都是引用是否相同。如下的示例代码:

1
2
3
4
5
6
7
8
9
10
obj1 = {name:'tom'}
obj2 = {name:'tom'}

if (obj1 === obj2) {
console.log('obj1 === obj2')
}

if (obj1 == obj2) {
console.log('obj1 == obj2')
}

可以看到,运行程序后没有任何输出。 但如果代码改为:

1
2
3
4
5
6
7
8
9
10
obj1 = {name:'tom'}
obj2 = obj1

if (obj1 === obj2) {
console.log('obj1 === obj2')
}

if (obj1 == obj2) {
console.log('obj1 == obj2')
}

则可以看到:

1
2
obj1 === obj2
obj1 == obj2

本文标题:Javascript中的等于运算符

文章作者:Morning Star

发布时间:2019年11月06日 - 15:11

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/web/javascript/javascript-some-equals/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。