es6運算符- ?.與??與??=與&&=與!!


?. 鏈判斷運算符

左側的對象是否為null或undefined,若是則不再往下運算,而是返回undefined,否則一直運算下去,直到返回最后一個值。
鏈判斷運算符?.讀取深度嵌套在對象鏈中的屬性值,而不必驗證每個值。當值為空時,表達式停止計算並返回 undefined。

let person = {
    name: '拾柒',
    body: {
        color: 'yellow',
        height: 179,
        weight: 70,
        sex: null
    },
    action: function(name){
        console.log(name)
    }
}
let res = person?.body?.age; // => undefined 
// 等價於
let res = person&& person.body&& person.body.location // 作用就是判斷person下的body下的age是否為null或者undefined,當其中一鏈為null或者undefined時就直接返回undefined

let res2 = person?.sex; // => undefined

鏈判斷運算符?.有三種寫法。

  • obj?.prop // 對象屬性是否存在(例子如上)
  • obj?.[expr] // 同上
  • func?.(...args) // 函數或對象方法是否存在
person ?. action ?. ('peter'); // peter

?? 空值合並運算符

忽略錯誤值(如 0 和空字符串)的同時指定默認值。
左側的對象是否為 undefined 或 null,若是的話,直接返回下一個值,若不是的話,則直接返回前一個值。
判斷方式和 || 一樣
區別就是:

  • ?? 只判斷 undefined 和 null
function query(item) {
    return item ?? {}
}
// 等價於
function query(item) {
    if (item == null || item == undefined) {
        return {}
    } else {
        return item;
    }
}
  • || 判斷假值 undefined、null、''、false、0
function query(item) {
    return item || {}
}
// 等價於
function query(item) {
    if (item === 0 || item === "" || item === false || item === null || item === undefined) {
        return {}
    } else {
        return item;
    }
}

??= 空賦值運算符

僅當值為 null 或 undefined 時,此賦值運算符才會賦值(沒想出來和??比有什么適用場景...)

function config(options) {
    options.duration ??= 100;
    options.speed ??= 25;
    return options;
}

config({ duration: 125 }); // { duration: 125, speed: 25 }
config({}); // { duration: 100, speed: 25 }

&&= 與賦值運算符

當前者不是假值時,可賦值后者的值,若是假值時,直接賦值假值

let A = 'abc';
let a = 1;
let b = 0;
let c = false;
let d = null;
let e = undefined;
let f = '';
A &&= '拾柒'; // '拾柒'
a &&= '拾柒'; // '拾柒'
b &&= '拾柒'; // 0
c &&= '拾柒'; // false
d &&= '拾柒'; // null
e &&= '拾柒'; // undefined
f &&= '拾柒'; // ''

!! 雙非

用來做類型判斷,在第一步!(變量)之后再做邏輯取反運算

var a;
if(a != null && typeof(a) != undefined && a != ''){
    //a有內容才執行的代碼  
}

等價於

if(!!a){
    //a有內容才執行的代碼...  
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM