最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中???、??=、?.和?||的區(qū)別淺析

 更新時間:2022年08月03日 11:53:12   作者:asdfsdgfsdgfa  
在?JS?中,???運(yùn)算符被稱為非空運(yùn)算符,下面這篇文章主要給大家介紹了關(guān)于JavaScript中???、??=、?.和?||區(qū)別的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

undefined和null是兩個比較特殊的數(shù)據(jù)類型,是不能用點(diǎn)操作符去訪問屬性的,否則將會報(bào)錯

    let a;
    console.log(a?.name); //undefined
    console.log(a.name); //報(bào)錯

    let obj = {};
    console.log(obj.name); //undefined
    console.log(obj?.name?.a); //undefined
    console.log(obj.name.a); //報(bào)錯

?? 與 || 的區(qū)別

相同點(diǎn):

?? 和 || 的用法相同,都是前后是值,中間用符號連接,根據(jù)前面的值來判斷最終是返回前面的值還是后面的值。

A ?? B

A || B

不同點(diǎn):

判斷的方法不同:

使用 ?? 時,只有A為 null 或者 undefined 時才會返回 B;

使用 || 時,A會先轉(zhuǎn)化為布爾值判斷,為true時返回A , false 返回B

// ??
    console.log(undefined ?? 2);  // 2
    console.log(null ?? 2);   // 2
    console.log(0 ?? 2);  // 0
    console.log("" ?? 2);   // ''
    console.log(true ?? 2);  // true
    console.log(false ?? 2);   // false
 
// ||
    console.log(undefined || 2);   // 2
    console.log(null || 2);     // 2
    console.log(0 || 2);        // 2
    console.log("" || 2);     // 2
    console.log(true || 2);     // true
    console.log(false || 2);      // 2

空值合并操作符 ??

只有當(dāng)左側(cè)為null 或者undefined 時,才會返回右側(cè)的值

可選鏈操作符 ?. 

?. 允許讀取連接對象鏈深處的屬性的值,而不必明確驗(yàn)證鏈中的每個引用是否有效。

?. 操作符的功能類似于. 鏈操作符,不同之處在于,在引用為空,即 null 或者 undefined 的情況下不會引起錯誤,該表達(dá)式短路返回值。 

    const obj = { a: { b: [{ name: "obj" }] } };
 
    // 原本的寫法
    console.log(obj && obj.a && obj.a.b.length && obj.a.b[0].name); //obj
 
    // 可選鏈寫法
    console.log(obj?.a?.b?.[0]?.name); // obj
    console.log(obj?.b?.c?.d); // undefined

?.可以和 ?? 運(yùn)算符結(jié)合使用 

    const obj = { a: { name: "obj" } };
 
    console.log(obj?.a?.b ?? "hello world"); // hello world

空值賦值運(yùn)算符(??=)

當(dāng)??=左側(cè)的值為null、undefined的時候,才會將右側(cè)變量的值賦值給左側(cè)變量.其他所有值都不會進(jìn)行賦值 

    let a = "你好";
 
    let b = null;
    let c = undefined;
    let d = 0;
    let e = "";
    let f = true;
    let g = false;
 
    console.log((b ??= a)); // 你好
    console.log((c ??= a)); // 你好
    console.log((d ??= a)); // 0
    console.log((e ??= a)); // ''
    console.log((f ??= a)); // true
    console.log((g ??= a)); // false
 
    console.log(b); // 你好
    console.log(c); // 你好
    console.log(d); // 0
    console.log(e); // ''
    console.log(f); // true
    console.log(g); // false

補(bǔ)充:?. 鏈判斷運(yùn)算符

鏈判斷運(yùn)算符?. 允許開發(fā)人員讀取深度嵌套在對象鏈中的屬性值,而不必驗(yàn)證每個引用。當(dāng)引用為空時,表達(dá)式停止計(jì)算并返回 undefined。

let travelPlans = {
  destination: 'DC',
  monday: {
    location: 'National Mall',
    budget: 200,
    host: null
  }
}
let res = travelPlans?.tuesday?.location ?? "locahost"; // => locahost
let res2 = travelPlans?.host; // => undefined

這個是什么操作呢??

這個location是哪里來的呢?這個tuesday又是哪里來的呢?就算不是外面的travelPlans這個對象里也沒有l(wèi)ocation和tuesday?。。。〗?jīng)過詢問大佬后得

let res = travelPlans?.tuesday?.location; 
<=等價=> 
let res = travelPlans&& travelPlans.tuesday&& travelPlans.tuesday.location

作用就是判斷這個對象(travelPlans)下的(tuesday)下的(location)是否為null或者undefined,當(dāng)其中一鏈為null或者undefined時就返回undefined,這樣即使中間缺少一個屬性也不會報(bào)錯,雙問號后面接的就是默認(rèn)值。

總結(jié)

到此這篇關(guān)于JavaScript中? ?、??=、?.和 ||區(qū)別的文章就介紹到這了,更多相關(guān)JS中? ?和??=和?.和 ||區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

沅陵县| 木里| 高平市| 称多县| 墨脱县| 苏州市| 渑池县| 盐津县| 霍林郭勒市| 邢台县| 张家港市| 浪卡子县| 纳雍县| 旺苍县| 黄大仙区| 平湖市| 乌拉特前旗| 敖汉旗| 八宿县| 大埔区| 长岛县| 波密县| 广宁县| 淄博市| 青龙| 红安县| 乳山市| 天门市| 莱芜市| 孝感市| 盐城市| 扎兰屯市| 宾阳县| 天柱县| 沧源| 时尚| 昆山市| 余干县| 昭通市| 绥德县| 永州市|