gpt4 book ai didi

javascript - 如何在 Typescript 中使用 Nullish Coalescing

转载 作者:行者123 更新时间:2023-12-04 17:29:36 25 4
gpt4 key购买 nike

随着 Typescript 3.7 的发布,现在支持 Nullish Coalescing .但是,似乎我用错了。我有以下结构:

type myType = { ["myKeys"]?: Array<string> }
let data: myType;
data = {};
data["myKeys"] = ["index0"];

console.log(data?.["myKeys"]?.indexOf("index0")) // 0

if (data?.["myKeys"]?.indexOf("index0") ?? -1 === -1) { // returns false
} else {
console.log("returns false");
}

data["myKeys"].push("index1")
console.log(data?.["myKeys"]?.indexOf("index1")) // 1

if (data?.["myKeys"]?.indexOf("index1") ?? -1 === -1) { // returns true - why?
console.log("Why is it true");
}

为什么 ??index1 的索引时,运算符的行为会有所不同是 1index0 的索引是 0 .两者都应该返回 false,因为它是 !== -1
游乐场 link

最佳答案

这是一个优先级问题。您的代码被评估为:

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");
}

奇怪的是,我没有看到 the proposal 中讨论的优先级。虽然在 the draft spec 中提到过作为 Jonas mentions , 它确实出现在 the issues .

如您所见,这与 || 的优先级一致,这是它非常非常近的亲戚:

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)}`);


根据草案规范, ??优先级低于 || (大概只是更低)。 (为避免混淆, &&|| 表达式中也不允许使用它。)

关于javascript - 如何在 Typescript 中使用 Nullish Coalescing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58876946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com