在 JavaScript 中,值的比较是一个基础但重要的概念,主要有以下几种比较方式:
5 == '5'
// true (字符串'5'转换为数字5)true == 1
// true (true转换为1)null == undefined
// true5 === '5'
// falsetrue === 1
// falsenull === undefined
// false>
大于<
小于>=
大于等于<=
小于等于这些运算符也会进行类型转换:
'10' > 5 // true (字符串'10'转换为数字10)
'10' < '5' // true (字符串比较,按字符顺序比较)
NaN
与任何值(包括自己)比较都是 false
NaN == NaN // false
NaN === NaN // false
需要使用 isNaN()
函数检测
null
和 undefined
只与彼此相等
null == undefined // true
null === undefined // false
对象比较的是引用,不是内容:
const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;
obj1 == obj2 // false
obj1 === obj2 // false
obj1 == obj3 // true
obj1 === obj3 // true
总是使用严格相等(===) 避免类型转换带来的意外行为
比较对象时,如果需要比较内容,可以:
JSON.stringify()
转换为字符串比较_.isEqual()
等工具函数处理 NaN
时总是使用 isNaN()
或 Number.isNaN()
// 推荐
if (value === expectedValue) { ... }
// 不推荐
if (value == expectedValue) { ... }
理解 JavaScript 的值比较机制对于编写可靠和可预测的代码至关重要。