起因
最近在研究
cron 運算式和時間的互相轉化問題,然后突然看到了一個有意思的語法,于是就拿來研究了一下,
一、js 中神奇的 ?
說到 ? ,大家肯定都不陌生吧,立馬就能夠想到三元運算式,當然還有其它的語法,比如雙問號語法 ?? ,還有在正則運算式中,
1、三元運算式
var flag = true;
var log = flag ? '真' : '假';
console.log(log); // 真
大家都知道這個,就是指 ? 前面的運算式為真時會執行 : 前面的陳述句,否則執行 : 后面的,所以這個地方必定輸出為真,
2、??
有了前面提到的 第1點,我相信這一個很好理解,
說到雙問號語法,就不得不說 || 、 && 這兩個語法了,但是我相信大家都已經很清楚這兩個語法了,
無非就是邏輯運算 或 和 與,
var flag = true;
var log = flag || '邏輯或';
console.log(log); // true
var flag = false;
var log = flag || '邏輯或';
console.log(log); // 邏輯或
var flag = null;
var log = flag || false;
console.log(log); // false
嗯...言簡意賅,
var flag = true;
var log = flag && '邏輯與';
console.log(log); // 邏輯與
var flag = false;
var log = flag && '邏輯與';
console.log(log); // false
var flag = null;
var log = flag && false;
console.log(log); // null
嗯...挺明顯的吧,短路操作,
重頭戲來了,雙 ?? ,
var flag = true;
var log = flag ?? '??';
console.log(log); // true
var flag = false;
var log = flag ?? '??';
console.log(log); // false
var flag = undefined;
var log = flag ?? '??';
console.log(log); // ??
var flag = null;
var log = flag ?? '??';
console.log(log); // ??
咳咳,其實感覺和 || 很像,只不過只有在前面的運算式為 undefined 或者 null 時,才會執行后面的陳述句,否則不論前面的運算式為真還是為假都會執行前面的陳述句,而 || 的前面只要為假時就會執行后面的陳述句了,
二、?
如果你以為我只是想說這個,那你就大錯特錯了,因為這些老掉牙的都說過不知道多少遍了,大家都懂,但是下面要說的這個我之前是真的沒見過,可能是我孤陋寡聞吧,
提前尷尬一波,,,
?
大家在取陣列或者物件中的值時是不是一定會用到
var arr = [0, 1, 2];
arr[0]; // 0
arr[1]; // 1
var obj = {a: 1, b: 2, c: 3};
obj['a']; // 1
obj['b']; // 2
諸如此類的方法,
但是如果在取值前 arr 或者 obj 為 undefined 或者 null 那么將會報錯,
所以有了這神奇的操作,
var arr = [0, 1, 2];
arr?.[0]; // 0
arr?.[1]; // 1
var obj = {a: 1, b: 2, c: 3};
obj?.['a']; // 1
obj?.['b']; // 2
可以看到取值其實是一樣的,只不過當 arr 或者 obj 為 undefined 或者 null 時并不會報錯,而是回傳 undefined , 如下圖,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/246488.html
標籤:其他
上一篇:Javascript裝飾器原理
下一篇:CSS學習筆記
