在javascript语法中,有两个可用于比较变量是否相等或相同的运算符,”==”和”===”。如果不理解每一个的特点,就容易在程序中产生一些莫名其妙的错误。
案例比较
先来看几个例子:
1 | if ('' == 0) { |
运行这段代码,输出为:
1 | blank equals zero |
可以看到以上条件全部成立。
但如果把 “==” 换成 “===” 呢? 代码如下:
1 | if ('' === 0) { |
可以看到以上的表达式全部都不成立了(返回 false)。
原生数据类型的比较
实际上,在javascript中, “==” 叫相等运算符, “===” 叫严格运算符,仔细比较以上的示例,我们可以发现,”===”和”==”主要区别在于面对不同数据类型时会有不同的表现:
“===” 会首先比较数据类型是否相同,如果不同,则直接返回 false, 如果相同,再近一步比较值
“==” 会首先比较数据类型是否相同,如果不同,则进行类型转换,先转为一样的数据类型,再进一步比较值。
复合数据类型的比较
对于复合数据类型的变量(比如对象,函数,数组等),”===”和”==”比较的都是引用是否相同。如下的示例代码:
1 | obj1 = {name:'tom'} |
可以看到,运行程序后没有任何输出。 但如果代码改为:
1 | obj1 = {name:'tom'} |
则可以看到:
1 | obj1 === obj2 |