2023前端面试题-前端javascript面试题-js中 == 和 === 的区别?

76 阅读2分钟

在 JavaScript 中,== 和 === 都是比较运算符,用于比较两个值是否相等。它们的区别在于比较的方式和规则。

== 运算符比较两个值时,会进行自动类型转换,将两个值转换为相同的类型再进行比较。在比较时,它遵循以下规则:

1、如果两个值类型相同,则直接比较它们的值。

2、如果两个值类型不同,则将它们转换为相同的类型再进行比较。转换规则如下:

  • 如果其中一个值为 null,另一个值必须为 null 或 undefined 才会返回 true。
  • 如果其中一个值为 NaN,返回 false。
  • 如果比较的两个值都是字符串、数字或布尔值,则将字符串转换为数字或将布尔值转换为数字再进行比较。
  • 如果比较的两个值中至少一个是对象、数组或函数,则先将它们转换为原始值再进行比较。转换规则如下:
    • 对象:先调用 valueOf() 方法获取其原始值,如果返回的不是原始值,则再调用 toString() 方法获取其原始值。
    • 数组:将数组转换为字符串,再将字符串转换为数字。
    • 函数:将函数转换为字符串,再将字符串转换为数字。

例子

console.log(1 == "1");  // true
console.log(1 == true);  // true
console.log("1" == true);  // true
console.log(null == undefined);  // true
console.log(NaN == NaN);  // false
console.log("5" == [5]);  // true
console.log({valueOf: () => 2} == 2);  // true
console.log([1, 2] == "1,2");  // true
console.log(function() {} == "");  // false

=== 运算符比较两个值时,不会进行自动类型转换,只有在类型和值都相同的情况下才会返回 true。它遵循以下规则:

1、如果比较的两个值类型不同,则直接返回 false。

2、如果比较的两个值都是基本数据类型(字符串、数字、布尔值、null 或 undefined),则比较它们的值是否相等。

3、如果比较的两个值都是引用类型(对象、数组、函数),则比较它们是否引用同一个对象(即比较它们在内存中的地址)。

例子

console.log(1 === "1");  // false
console.log(1 === true);  // false
console.log("1" === true);  // false
console.log(null === undefined);  // false
console.log(NaN === NaN);  // false
console.log("5" === [5]);  // false
console.log({valueOf: () => 2} === 2);  // false
console.log([1, 2] === "1,2");  // false
console.log(function() {} === "");  // false

更多前端面试题请看:

存图扫

daan-s.png