前言:相信很多小伙伴在面试的时候会考到=== 和 ==的区别,这是一个很简单但又很容易混淆的知识,只需稍加记忆,就能完美地回答面试官提出的这个问题,这篇文章会先为您讲解等于运算符(==)和全等运算符 (===)的基础知识,然后再对其进行总结。事不宜迟,让我给大家揭开这个问题答案吧!
一、等于运算符(==)
等于运算符(==)检查其两个操作数是否相等,并返回Boolean结果。与严格相等运算符(===)不同,它会尝试强制类型转换并且比较不同类型的操作数。
语法: x == y
(1)如果两个操作数是不同类型的,就会尝试在比较之前将它们转换为相同类型
①当数字与字符串进行比较时,会尝试将字符串转换为数字值。
②如果操作数之一是
Boolean,则将布尔操作数转换为1或0。③如果是
true,则转换为1。④如果是
false,则转换为0。⑤如果操作数之一是对象,另一个是数字或字符串,会尝试使用对象的
valueOf()和toString()方法将对象转换为原始值。
// 1、当数字与字符串进行比较时,会尝试将字符串转换为数字值。
console.log(123 == '123'); //输出的结果为true
//2、如果操作数之一是Boolean,则将布尔操作数转换为1或0。
//3、如果是true,则转换为1。
//4、如果是 false,则转换为0。
console.log(123 == true); //输出的结果为false,会先把true转换为1,再与123比较
console.log(1 == true); //输出的结果为true,会先把true转换为1,再与1比较
console.log(0 == false); //输出的结果为true,会先把false转换为0,再与0比较
//5、与对象比较
const object1 = {"key": "value"} //建立对象1
const object2 = {"key": "value"}; //建立对象2
object1 == object2 //输出的结果为 false
object2 == object2 // 输出的结果为true
(2)如果操作数具有相同的类型,则将它们进行如下比较:
①String:仅当两个操作数具有相同顺序的相同字符时才返回。true
②Number:仅当两个操作数具有相同的值时才返回。并被视为相同的值。如果任一操作数为非数字型,则返回。true 、+0 、 -0、 NaN 、 false
③Boolean:仅当操作数为两个或两个时才返回。true、true、false、true
console.log(123 == '123a'); //输出的结果为false
console.log(1 == 1); //输出的结果为true
console.log('hello' == 'hello'); //输出的结果为true
二、全等运算符 (===)
全等运算符 (===) 会检查它的两个操作数是否相等,包括操作数的类型和值是否相等,并且返回一个布尔值结果。与相等运算符不同,全等运算符总是认为不同类型的操作数是不同的。
语法:x === y
①如果两个操作数类型不同,则比较结果一定是false。
②如果两个操作的的类型相同,而值不同,则比较结果一定是false。
③如果两个操作数的类型不相同,而值相同,则比较结果一定是false。
④如果两个操作数的类型和值相同,则比较的结果为true。
//全等运算符的比较
console.log("hello world" === "hello world"); // 比较结果为true
console.log("hello" === "hola"); // 比较结果为false
console.log(3 === 3); // 比较结果为true
console.log(3 === 4); // 比较结果为false
console.log(true === true); // 比较结果为true
console.log(true === false); // 比较结果为false
console.log(null === null); // 比较结果为true
三、=== 和 ==的区别
(1)当进行==比较时: 先判断等号左右两个操作数的数据类型,如果数据类型相同, 则进行===比较;如果数据类型不同, 则会把两边的数据类型转换为同一类型, 转换成同一类型后再进行比较。
(2)===比较时, 如果等号左右两个操作数的数据类型不同,直接输出判断结果为false。
注意点:
“=”:这个=表示赋值,不表示运算符;
“==”:表示等于(值);
“===”:表示全等于(类型和值) ;
资料参考链接: