== 和 === 有什么区别
在javascript中,== 和 === 都用于比较两个值是否相等,但它们的比较方式不同。
== 运算符在比较时,会先进行类型转换,然后再比较两个值是否相等。类型转换的规则比较复杂,可以概括为以下几点:
- 如果两个值类型相同,则直接比较它们的值。
- 如果一个值是null,另一个值是undefined,则它们相等。
- 如果一个值是数字,另一个是字符串。则现将字符串转换为数字后比较。
- 如果一个值是布尔值,另一个是非布尔值,则将布尔值转换为数字后再比较。
- 如果一个值是对象,另一个值是数字、字符串或布尔值,则将对象转换为原始值后再比较。
例如:
- console.log(1 == "1"); // true 字符串"1"被转换为数字
- console.log(true == 1); // true 布尔值true转换为数字1
- console.log(null == undefined); // true
- console.log("5" == [5]); // true 数组[5]被转换为其字符串表示形式,即"5",然后与字符串 "5" 进行比较
- console.log({} == {}); // false 两个对象指向内存中的不同位置
=== 运算符比较时,不进行类型转换,只有当两个值的类型和值都相等时,才会返回true。
例如:
- console.log(1 === "1"); // false 类型不同
- console.log(true == 1); // false 类型和值不同
- console.log(null == undefined); // false 类型不同
- console.log("5" == [5]); // false 类型不同
- console.log({} == {}); // false 两个不同的对象