es6中??與||區(qū)別小結(jié)
??
和||
都是邏輯運(yùn)算符,但它們的作用不同。??
是空值合并運(yùn)算符,它用于檢查左側(cè)的表達(dá)式是否為null
或undefined
。如果是null
或undefined
,則返回右側(cè)的表達(dá)式;如果不是,則返回左側(cè)的表達(dá)式
let foo = null; let bar = foo ?? 'default'; // bar 的值為 'default' let baz; let qux = baz ?? 'default'; // qux 的值為 'default'
||
是邏輯或運(yùn)算符,它用于檢查左側(cè)的表達(dá)式是否為假。如果左側(cè)的表達(dá)式為假,則返回右側(cè)的表達(dá)式;如果左側(cè)的表達(dá)式為真,則返回左側(cè)的表達(dá)式。在JavaScript中,只有null
、undefined
、''
、0
、NaN
被視為假值,其他值都被視為真值。
let foo = 'hello'; let bar = foo || 'default'; // bar 的值為 'hello' let baz; let qux = baz || 'default'; // qux 的值為 'default'
因此,??
和||
的區(qū)別在于它們的邏輯行為和使用場(chǎng)景。??
用于空值合并
,而||
用于邏輯或
。
?. 鏈判斷運(yùn)算符
左側(cè)的對(duì)象是否為null或undefined,若是則不再往下運(yùn)算,而是返回undefined,否則一直運(yùn)算下去,直到返回最后一個(gè)值。
鏈判斷運(yùn)算符?.讀取深度嵌套在對(duì)象鏈中的屬性值,而不必驗(yàn)證每個(gè)值。當(dāng)值為空時(shí),表達(dá)式停止計(jì)算并返回 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 // 等價(jià)于 let res = person&& person.body&& person.body.location // 作用就是判斷person下的body下的age是否為null或者undefined,當(dāng)其中一鏈為null或者undefined時(shí)就直接返回undefined let res2 = person?.sex; // => undefined
鏈判斷運(yùn)算符?.有三種寫法。
- obj?.prop // 對(duì)象屬性是否存在(例子如上)
- obj?.[expr] // 同上
- func?.(...args) // 函數(shù)或?qū)ο蠓椒ㄊ欠翊嬖?/li>
person ?. action ?. ('peter'); // peter
?? 空值合并運(yùn)算符
忽略錯(cuò)誤值(如 0 和空字符串)的同時(shí)指定默認(rèn)值。
左側(cè)的對(duì)象是否為 undefined 或 null,若是的話,直接返回下一個(gè)值,若不是的話,則直接返回前一個(gè)值。
判斷方式和 || 一樣
區(qū)別就是:
- ?? 只判斷 undefined 和 null
function query(item) { return item ?? {} } // 等價(jià)于 function query(item) { if (item == null || item == undefined) { return {} } else { return item; } }
- || 判斷假值 undefined、null、''、false、0
function query(item) { return item || {} } // 等價(jià)于 function query(item) { if (item === 0 || item === "" || item === false || item === null || item === undefined) { return {} } else { return item; } }
??= 空賦值運(yùn)算符
僅當(dāng)值為 null 或 undefined 時(shí),此賦值運(yùn)算符才會(huì)賦值(沒(méi)想出來(lái)和??比有什么適用場(chǎng)景...)
function config(options) { options.duration ??= 100; options.speed ??= 25; return options; } config({ duration: 125 }); // { duration: 125, speed: 25 } config({}); // { duration: 100, speed: 25 }
&&= 與賦值運(yùn)算符
當(dāng)前者不是假值時(shí),可賦值后者的值,若是假值時(shí),直接賦值假值
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 &&= '拾柒'; // ''
!! 雙非
用來(lái)做類型判斷,在第一步!(變量)之后再做邏輯取反運(yùn)算
var a; if(a != null && typeof(a) != undefined && a != ''){ //a有內(nèi)容才執(zhí)行的代碼 }
等價(jià)于
if(!!a){ //a有內(nèi)容才執(zhí)行的代碼... }
到此這篇關(guān)于es6中??與||區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)es6 ??與||內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- ES6擴(kuò)展運(yùn)算符的理解與使用場(chǎng)景
- ES6擴(kuò)展運(yùn)算符的使用方法示例
- 詳解ES6 擴(kuò)展運(yùn)算符的使用與注意事項(xiàng)
- ES6擴(kuò)展運(yùn)算符和rest運(yùn)算符用法實(shí)例分析
- es6數(shù)組之?dāng)U展運(yùn)算符操作實(shí)例分析
- ES6擴(kuò)展運(yùn)算符用法實(shí)例分析
- 基于es6三點(diǎn)運(yùn)算符的使用方法(實(shí)例講解)
- ES6擴(kuò)展運(yùn)算符的用途實(shí)例詳解
- ES6中的rest參數(shù)與擴(kuò)展運(yùn)算符詳解
相關(guān)文章
原生javascript實(shí)現(xiàn)圖片放大鏡效果
這篇文章主要為大家詳細(xì)介紹了原生javascript實(shí)現(xiàn)圖片放大鏡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01eslint+prettier統(tǒng)一代碼風(fēng)格的實(shí)現(xiàn)方法
這篇文章主要介紹了eslint+prettier 統(tǒng)一代碼風(fēng)格的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07js如何查找json數(shù)據(jù)中的最大值和最小值方法
這篇文章主要介紹了js如何查找json數(shù)據(jù)中的最大值和最小值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04小程序角標(biāo)的添加及綁定購(gòu)物車數(shù)量進(jìn)行實(shí)時(shí)更新的實(shí)現(xiàn)代碼
這篇文章主要介紹了小程序角標(biāo)的添加及綁定購(gòu)物車數(shù)量進(jìn)行實(shí)時(shí)更新的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12THREE.JS使用TransformControls對(duì)模型拖拽的代碼實(shí)例
拖拽是前端實(shí)現(xiàn)中比較常用的一種效果,下面這篇文章主要給大家介紹了關(guān)于THREE.JS使用TransformControls對(duì)模型拖拽的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03Js 獲取當(dāng)前函數(shù)參數(shù)對(duì)象的實(shí)現(xiàn)代碼
這篇文章主要介紹了Js 獲取當(dāng)前函數(shù)參數(shù)對(duì)象的實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-06-06