【发布时间】:2021-07-11 23:42:41
【问题描述】:
其实这个问题是Can (a== 1 && a ==2 && a==3) ever evaluate to true?的延伸。
我们可能知道,loose equality operator (==) 的秘密将尝试将两个值转换为通用类型。结果会调用一些函数。
ToPrimitive(A)尝试将其对象参数转换为原语 值,通过调用A.toString和A.valueOf的不同序列 A 上的方法。
所以下面的代码将按预期工作。
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
但是,strict equality (===) 的问题。 JavaScript 引擎不会调用 .valueOf、.toString 或 Symbol.toPrimitive 等方法。
我该如何解决?任何帮助将不胜感激。
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if(a === 1 && a === 2 && a === 3) {
console.log('Never catch!');
}
【问题讨论】:
-
请阅读您所链接问题的所有答案。许多人也会使用
===。 -
@Bergi 我做到了。但他们都没有指出它适用于
strict equality (===)。此外,我做了谷歌,搜索所以没有这样的现有主题。因此,IMO,值得拥有这样的特定主题:)
标签: javascript ecmascript-6 compare