亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Typescript 中使用 Nullish Coalescing

如何在 Typescript 中使用 Nullish Coalescing

鳳凰求蠱 2022-01-01 20:44:08
隨著 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")) // 1if (data?.["myKeys"]?.indexOf("index1") ?? -1 === -1) { // returns true - why?    console.log("Why is it true"); }為什么??當索引為index1is1而索引為index0is時運算符的行為不同0。兩者都應該返回 false,因為它是!== -1
查看完整描述

2 回答

?
大話西游666

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} || $ === $:   ${a || b === b}`);

console.log(`(${a} || $) === $: ${(a || b) === b}`);

console.log(`${a} || ($ === $): ${a || (b === b)}`);


根據草案規范,??優先級低于||(大概只是更低)。(為避免混淆,也不允許在&&or||表達式中。)


查看完整回答
反對 回復 2022-01-01
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

引用草稿

?? 具有比 || 低的優先級

或者換句話說,您的代碼的行為大致如下:

  data?.["myKeys"]?.indexOf("index0") || -1 === -1

這將被視為:

 (data?.["myKeys"]?.indexOf("index0")) || (-1 === -1)


查看完整回答
反對 回復 2022-01-01
  • 2 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號