在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
|