js中== ===的区别
js是弱类型语言,这两个符号都是判断值是否相等的操作符,== 与 === ,两者相比,== 会做一定的类型转换;而 === 不做类型转换,所接受的相等条件更加严格。
等号==
比较之前先进行隐式转换,类型相同与否无关,若类型一样,则和===比较一样进行严格比较。若不一样:
若是undefined和null(注意:undefined和null属于两种基本数据类型),返回true。
若一个是Number类型,一个是String类型,则把String类型转换成Number类型比较。如:"1" == 1;
若有一个为Boolean类型,则把Boolean类型的值转换成Number类型的值来比较,Boolean(2) == 1;Boolean(2) == "1"; //ture
若一个是Number类型或者String类型,一个是Object类型,先把Object类型转换成基本数据类型,再进行比较。
注意:a == c; b==c; a == b?不一定,比如:
1 var str1 = new String("Hello");
2
3 var str2 = new String("Hello");
4 str1 == "Hello";
5 str2 == "Hello";
6 alert(str1 == str2)
恒等号===
首先判断两个值的类型是否相等,如果不相等,直接返回false:"1" === 1;
然后,如果类型相同:若是undefined和null,返回true。
若是Number类型,(1)一般的数值相等返回true,(2)如果一个是NaN,则返回false,两个NaN返回true,(3)0 -0 +0返回true。
若是String类型,完全相等时返回true。
若是Boolean类型,相等时返回true。
若两个变量引用的对象相同,返回true。
1 function aa(name){
2 this.name = name;
3 }
4 var a1 = new aa("wo");
5 var a2 = new aa("wo");
6 var b = a1;
7 var c = a1;
8 alert(c === b); //返回true
9
10 alert(a1 == a2); //返回false
11 alert(a1 === a2); //返回false
12 alert(a1.name == a2.name); //返回false
13 alert(a1.name === a2.name); //返回false
慌慌张张 匆匆忙忙 为何生活总是这样 难道说我的理想 就是这样度过一生的时光 不卑不亢 不慌不忙 也许生活应该这样 难道说六十岁以后 再去寻找我想要的自由 其实我也常对自己说 人要学会知足而常乐 可万事都一笑而过 还有什么意思呢