本文小編為大家詳細介紹“JavaScript中? ?、??=、?.和 ||的區別是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“JavaScript中? ?、??=、?.和 ||的區別是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
undefined和null是兩個比較特殊的數據類型,是不能用點操作符去訪問屬性的,否則將會報錯
let a; console.log(a?.name); //undefined console.log(a.name); //報錯
let obj = {}; console.log(obj.name); //undefined console.log(obj?.name?.a); //undefined console.log(obj.name.a); //報錯
相同點:
?? 和 || 的用法相同,都是前后是值,中間用符號連接,根據前面的值來判斷最終是返回前面的值還是后面的值。
A ?? B
A || B
不同點:
判斷的方法不同:
使用 ?? 時,只有A為 null 或者 undefined 時才會返回 B;
使用 || 時,A會先轉化為布爾值判斷,為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
只有當左側為null
或者undefined
時,才會返回右側的值
?.
允許讀取連接對象鏈深處的屬性的值,而不必明確驗證鏈中的每個引用是否有效。
?.
操作符的功能類似于. 鏈操作符,不同之處在于,在引用為空,即 null
或者 undefined
的情況下不會引起錯誤,該表達式短路返回值。
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
?.可以和 ?? 運算符結合使用
const obj = { a: { name: "obj" } }; console.log(obj?.a?.b ?? "hello world"); // hello world
當??=左側的值為null、undefined的時候,才會將右側變量的值賦值給左側變量.其他所有值都不會進行賦值
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
鏈判斷運算符?. 允許開發人員讀取深度嵌套在對象鏈中的屬性值,而不必驗證每個引用。當引用為空時,表達式停止計算并返回 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這個對象里也沒有location和tuesday?。。?!經過詢問大佬后得
let res = travelPlans?.tuesday?.location; <=等價=> let res = travelPlans&& travelPlans.tuesday&& travelPlans.tuesday.location
作用就是判斷這個對象(travelPlans)下的(tuesday)下的(location)是否為null或者undefined,當其中一鏈為null或者undefined時就返回undefined,這樣即使中間缺少一個屬性也不會報錯,雙問號后面接的就是默認值。
讀到這里,這篇“JavaScript中? ?、??=、?.和 ||的區別是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。