一、主要区别:
1.通俗的来说,==是值的比较,而===不仅仅比较值,还比较引用的是否是同一个对象。
2.用==来比较的时候,如果两个数的操作数的类型不一样,会先转换。而===的操作数则不会进行任何转换。
3.if()里面用的是==判断,case里面用的是===判断。
例如if(null==undefined) 返回true
switch(null){
case "undefined":
//这里面不会执行
break;
}
二、===比较详解
1.如果2个值类型不同,则他们不相等。
2.如果两个值都是null,或者undefined,或者一个是null一个是undefined,则他们不相等。
3.如果有一个,或者两个都是NaN,则他们不相等。(NaN和任何对象任何值都不等,包括他本身。如果if(x!==x) 返回true,则说明X为NaN)。
4.如果两个值都是数字且数值相等的话,那么两者也相等。0 和-0也一样相等。
5.如果是字符串,内容、长度、编码不一样的话,那么他们不等。
6.如果两者引用值指向同一引用对象,则他们相等。如果指向不同的引用值,即使他们有完全一样的熟悉,同样也不相等。
三、==比较详解
1.如果两个值都是null,或者undefined,则他们相等。
2.如果一个是数字,另一个是字符串,先将字符串转换成数字,再比较。
3.如果其中有一个是boolean值,先把true转为1或者false转为0,再比较。
4.如果一个是对象,一个是数字或者字符串,则先将对象转换成原始值再进行比较。
==除了以上4以外,其他的不同类型之前的比较都不等。即使是两个对象类型一样,但不是引用同一个对象,也不一样。
四、具体案例
"A"===String("A")//true
"A"===new String("A")//false
[]==[]//false
{}=={}//false
2==[[[[2]]]]//true
var a=/124/,b=/124/;a==b//false
var a = Function.length,b= new Function().lenth;a==b;//false
var a = Date(0),b=new Date(0),c=new Date();//三者任意比较都是false