面试题答案
一键面试- 分析
NaN > NaN
、NaN < NaN
、NaN === NaN
的结果及原因:NaN > NaN
的结果为false
。原因是NaN
表示“非数字”,它不与任何值相等,包括自身,也无法与其他值进行常规的比较大小操作,所以这种比较返回false
。NaN < NaN
的结果为false
。同样,由于NaN
的特殊性,它不能与自身进行有意义的大小比较,所以返回false
。NaN === NaN
的结果为false
。===
是严格相等运算符,NaN
与任何值(包括自身)都不严格相等,所以返回false
。
- 自定义对象使其遵循类似
NaN
的比较规则:
const myNaN = {
valueOf() {
return NaN;
}
};
console.log(myNaN > myNaN); // false
console.log(myNaN < myNaN); // false
console.log(myNaN === myNaN); // false
原理:在进行比较操作时,JavaScript 会尝试将对象转换为原始值(通过调用 valueOf
或 toString
方法)。这里我们在自定义对象 myNaN
中定义了 valueOf
方法,使其返回 NaN
。这样,在比较 myNaN
时,实际上是在比较 NaN
,从而遵循了与 NaN
类似的特殊比较规则。