首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在什么情况下,“a != a”决心在JavaScript中成为真?

在什么情况下,“a != a”决心在JavaScript中成为真?
EN

Stack Overflow用户
提问于 2021-02-06 12:53:31
回答 1查看 66关注 0票数 1

通过查看svelte.js的代码,我发现了一个奇怪的函数:

代码语言:javascript
运行
复制
function not_equal(a, b) {
    return a != a ? b == b : a !== b;
}

有人能向我解释一下,在什么情况下,将一个变量与其自身进行不平等比较会导致错误?

我知道!===是比!=====更弱的比较运算符,因为他们并不真正关心类型,但我仍然不知道是什么使not_equal函数不同于简单的a !== b

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-06 12:59:17

有几种方法:

如果

  1. NaNNaN不等于任何东西,包括它本身。

代码语言:javascript
运行
复制
let a = NaN;
console.log(a != a); // true

我认为这可能是not_equal中的条件运算符的原因,因为对于这个函数,not_equal(NaN, NaN)false (例如,它认为NaN等于自己)。不过,我不清楚为什么他们会使用==而不是=== in b == b

  1. (这不适用于您的函数,只适用于a != a问题)。如果a是一个带有getter函数的属性,该属性在连续调用两次时返回一个不同的值(因为它返回一个随机值,或一个随时间变化的值,或者getter会变异该值,等等)。在with语句中使用(非常不可能),或者类似地使用代理而不是with

代码语言:javascript
运行
复制
const obj = {
    get a() {
        return Math.random();
    }
};
with (obj) {
    console.log(a != a); // PROBABLY true
}

(Note:有很好的理由不使用with,而且不能在严格的模式下使用。)

除此之外,我想不出a != atrue的一种方式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66077142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档