通过查看svelte.js的代码,我发现了一个奇怪的函数:
function not_equal(a, b) {
return a != a ? b == b : a !== b;
}有人能向我解释一下,在什么情况下,将一个变量与其自身进行不平等比较会导致错误?
我知道!=和==是比!==和===更弱的比较运算符,因为他们并不真正关心类型,但我仍然不知道是什么使not_equal函数不同于简单的a !== b
发布于 2021-02-06 12:59:17
有几种方法:
如果
NaN:NaN不等于任何东西,包括它本身。
let a = NaN;
console.log(a != a); // true
我认为这可能是not_equal中的条件运算符的原因,因为对于这个函数,not_equal(NaN, NaN)是false (例如,它认为NaN等于自己)。不过,我不清楚为什么他们会使用==而不是=== in b == b。
a != a问题)。如果a是一个带有getter函数的属性,该属性在连续调用两次时返回一个不同的值(因为它返回一个随机值,或一个随时间变化的值,或者getter会变异该值,等等)。在with语句中使用(非常不可能),或者类似地使用代理而不是with
const obj = {
get a() {
return Math.random();
}
};
with (obj) {
console.log(a != a); // PROBABLY true
}
(Note:有很好的理由不使用with,而且不能在严格的模式下使用。)
除此之外,我想不出a != a是true的一种方式。
https://stackoverflow.com/questions/66077142
复制相似问题