JS | 短路求值(Short-circuit evaluation)

跟後端做串接的時候,前端拿到value有可能不符預期拿到null or undefined,如果要用這value call一些指定型別才有的method,那就可能會TypeError

“Cannot read properties of undefined (reading ’toLowerCase’)“發生在一個undefined value call **toLowerCase()**method所產生的TypeError

為了解決這個錯誤,需要加判斷式,但其實邏輯運算子OR就可以辦到了, 用||設定預設值,這樣程式碼看起來整潔多了,而這樣的寫法叫短路求值

javascript

const moreVar = undefined;

const str = moreVar || ''

const result = str.toLowerCase();

console.log(result); // output ""

當value是null也適用

javascript

const moreVar = null;

const str = moreVar || ''

const result = str.toLowerCase();

console.log(result); // output ""

在JavaScript中,0""falsenullundefinedNaN都會是false

ES11(2020)新增的語法,符號為?.,使用在物件property(key value)和call function,當呼叫物件的key或是function為undefined or null,可以短路求undefined而非拋出一個錯誤

舉例:

javascript

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};

const dogName = adventurer.dog?.name;
console.log(dogName);
// Expected output: undefined

console.log(adventurer.someNonExistentMethod?.());
// Expected output: undefined
  1. https://bobbyhadz.com/blog/javascript-cannot-read-property-tolowercase-of-undefined#cannot-read-properties-of-undefined-reading-tolowercase
  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining