2 回答

TA贡献1817条经验 获得超14个赞
这是一个优先级问题。您的代码被评估为:
if (data?.["myKeys"]?.indexOf("index1") ?? (-1 === -1)) {
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^−−−−−−−−−^
console.log("Why is it true");
}
但你的意图是:
if ((data?.["myKeys"]?.indexOf("index1") ?? -1) === -1) {
// −^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
console.log("Why is it true");
}
奇怪的是,我没有看到提案中讨论的优先级,尽管它在规范草案中如乔纳斯提到的那样被提及,并且它确实出现在问题中。
如您所见,这与 的优先级一致||,这是它的非常非常近的亲戚:
const a = 2;
const b = -1;
console.log(`${a} || ${b} === ${b}: ${a || b === b}`);
console.log(`(${a} || ${b}) === ${b}: ${(a || b) === b}`);
console.log(`${a} || (${b} === ${b}): ${a || (b === b)}`);
根据草案规范,??优先级低于||(大概只是更低)。(为避免混淆,也不允许在&&or||表达式中。)
添加回答
举报