在什么情况下,'a != a'会在 JavaScript 中解析为 true?



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

function not_equal(a, b) {
return a != a ? b == b : a !== b;
}

有人能向我解释在什么情况下比较一个变量与它自己的不平等将解决假?

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

有两种方法:

1。如果aNaN:NaN不等于任何东西,包括它自己。

let a = NaN;
console.log(a != a); // true

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

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

const obj = {
get a() {
return Math.random();
}
};
with (obj) {
console.log(a != a); // PROBABLY true
}

(注意:有很好的理由不使用with,它不能在严格模式下使用。)

除此之外,我想不出a != a怎么能变成true

相关内容

最新更新