相等和全等运算符是用来比较两个操作符是否相等的意思;就是相等运算符会进行类型的转换,而全等运算符不会进行类型的转换;
比如:
相等由双等号( = = )表示,当两个运算数相等时,它就会返回true;为确定两个运算数是否相等时,这两个运算符都会进行类型转换;
全等号由三个等号表示( === ),只有在无需类型转换运算数就相等的情况下,才会返回true;列如:
在这段代码中,第一个 console.log使用等号来比较字符串 "66" 和数字 66,输出 "true"。如前所述,这是因为字符串 "66" 将被转换成数字 66,,然后才与另一个数字 66 进行比较。第二个 console.log 使用全等号在没有类型转换的情况下比较字符串和数字,当然,字符串不等于数字,所以输出 "false"。控制台图如下:
再看:
第一行和第二行的6和6 肯定是相等的,为true;第三个虽然左边是数字类型,右边是字符类型,但是JavaScript会自动进行类型的转换,让它们都是同一类型,这样子两者就相等了为true;第四个两者类型都不一样,就不可能全等为false;
再看:
第一和第二个是布尔值常常把true转换为1,false为0,就很明显了;
第三和第四个全等,类型都不一样,自然不等了;
再如:
0表示空,或者字符串里什么都没有,再字符串里只有空格,那么它们都属于空的,所以第一、第二个为true;null表示空值,undefined表示未声明的变量或没有赋值的变量,两者都是假值,所以为true;它们两个除了自身的值,不等于任何值,所以第四和第五个为false;
最后再看一个:
在使用操作符的时候对于引用类型的数据,比较的是地址而不是真实的值,这里对象就属于引用类型,看a和b是保存在堆里面的对象,但是它们赋值不一样为false;c在栈里,而c也就是栈引用a堆里,因此a和c都在引用同一对象,所以它们为true;