MST

星途 面试题库

面试题:JavaScript类型转换与比较中的边界情况及规范解读

在JavaScript规范下,分析 `NaN > NaN`、`NaN < NaN`、`NaN === NaN` 的结果并阐述原因。同时,假设我们自定义一个对象,如何使其在比较操作中遵循类似 `NaN` 的这种特殊比较规则(即与自身比较也不相等),请给出代码示例并解释原理。
44.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 分析 NaN > NaNNaN < NaNNaN === NaN 的结果及原因
    • NaN > NaN 的结果为 false。原因是 NaN 表示“非数字”,它不与任何值相等,包括自身,也无法与其他值进行常规的比较大小操作,所以这种比较返回 false
    • NaN < NaN 的结果为 false。同样,由于 NaN 的特殊性,它不能与自身进行有意义的大小比较,所以返回 false
    • NaN === NaN 的结果为 false=== 是严格相等运算符,NaN 与任何值(包括自身)都不严格相等,所以返回 false
  2. 自定义对象使其遵循类似 NaN 的比较规则
const myNaN = {
    valueOf() {
        return NaN;
    }
};
console.log(myNaN > myNaN); // false
console.log(myNaN < myNaN); // false
console.log(myNaN === myNaN); // false

原理:在进行比较操作时,JavaScript 会尝试将对象转换为原始值(通过调用 valueOftoString 方法)。这里我们在自定义对象 myNaN 中定义了 valueOf 方法,使其返回 NaN。这样,在比较 myNaN 时,实际上是在比较 NaN,从而遵循了与 NaN 类似的特殊比较规则。