开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
区别
在javascript里有相等运算符( == )和全等运算符( === ),用来比作两个操作数是否相等,两者之间的区别是相等运算符会进行类型的转换,全等运算符不会进行类型的转换
数值类型案例
写个小案例,看看结果是什么
console.log(6 == 6);
console.log(6 === 6);
console.log(6 == '6');
console.log(6 === '6');
在控制台里打印出来的分别是ture,ture,ture,false。第一个和第二个可以直接判断了,6和6是相等的,为ture
第三个如果学过其他的编程语言可能会答错,因为javascript是弱类型语言,左边是数组类型,右边是字符类型, javascript会自动进行类型的转换,让两个都为同一个类型,所以控制台打印出来的是ture
第四个使用了全等运算符,会检测两个值是否严格相等,它不会帮我们做任何的类型转换,既然类型都不一样,那么就肯定不会相等了,所以为false
布尔值类型案例
增加一点难度看看打印出来的结果
console.log(true == 1);
console.log(false == 0);
console.log(true === 1);
console.log(false === 0);
在编程语言里,布尔型的true会转化为1,false转化为0,那么第一个第二个打印出来的都是true
因全等运算符不作类型的转化,true和false还是布尔值类型,0和1还是数值类型,类型不相等所以第三第四个都为false
null和undefined类型案例
console.log('' == 0);
console.log(' ' == 0);
console.log(null == undefined);
console.log(null == 0);
console.log(undefined == '');
0表示空,而一个字符串里面什么内容都没有或者里面只有空格,那么都属于空,所以第一第二个都为true
在javascript里有两种特殊的数据类型,null表示空值,另一种undefined为声名的变量,两者都是假值,因此null == undefined的结果为true
但是null和undefined又非常特殊,他们两个除了自身以外不等于任何的值,因为null和undefined在比较的时候不能转换为其他的值,所以第四第五个答案为false
其他案例
console.log('false' == false);
console.log(NaN == NaN);
console.log(NaN == false);
console.log(NaN == false);
第一个应该很多人会猜错,不是相等运算符会自动转换吗?其实转换是有条件的,一个字符串一个布尔值,布尔值false会被转换为0,但是字符串不会进行转换,0不等于字符串false,所以打印为false
在数字类型里有一个特殊的值NaN,表示不是数字,它表示是否数字类型的一种状态,可以是一个范围内任意一个数字,因此NaN是不等于自身的,所以第二个为false。自身都不相等的值和其他值比较自然也不相等,所以第三第四个也为false