面试题:何时使用===何时使用==

kkcode
kkcode
2023-08-22阅读 927

考点:强制类型转换

在JavaScript中,使用 ===== 运算符来进行相等性比较。

=== 运算符用于严格相等性比较,它比较值和类型是否都相等。只有在两个操作数的值和类型完全相等时才返回 true,否则返回 false

== 运算符用于非严格相等性比较,它只比较值是否相等。在比较之前,它会自动进行类型转换,如果操作数的类型不同,会尝试将它们转换为相同类型,然后再进行比较。例如,1 == '1' 会返回 true,因为它们的值相等,即使一个是数字类型,一个是字符串类型。

使用 === 运算符可以避免类型转换带来的意外行为,因此在大多数情况下,建议使用 === 运算符进行相等性比较。只有在确实需要进行类型转换时,才使用 == 运算符。

以下是一些使用 ===== 的例子:

var a = 1;
var b = '1';

console.log(a === b); // false
console.log(a == b); // true,自动进行类型转换

console.log(0 === false); // false,类型不同
console.log(0 == false); // true,进行类型转换

console.log(null === undefined); // false,类型不同
console.log(null == undefined); // true,特殊规则

总而言之,使用 === 运算符进行严格相等性比较是一种较为安全和可靠的做法,只有在明确需要进行类型转换时,才使用 == 运算符。

练习

// 字符串拼接
let a = 100 + 10 // 110
let b = 100 + '10' // '10010'
let c = true + '10' // 'true10'

// ==
100 == '100' // true
0 == '' // true
0 == false // true
false == '' // true
null == undefined // true

// 除了==null 之外,其他一律用 ===
const obj = { x: 100 }
if(obj.a == null){} // 相当于 if(obj.a === null || obj.a === undefined)

// 前置知识:truly 变量 和 falsely 变量
// truly变量:!!a === true   (经过两步非运算值为true)
// falsely变量: !!a === false (经过两步非运算值为false)

// 以下是falsely变量,除此之外都是truly变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false

// if语句
if(a){} // falsely
if(!!0 === false) // truly 

// 逻辑运算
console.log(10 && 0) // 0
console.log('' || 'abc') // abc
console.log( !window.abc ) // true

评论数量:0