前端常用判斷符號(hào)??,?.?,!?,!!?,||?,&&,?:用法示例
??符號(hào)用于判斷左側(cè)值是否為undefined或null, 若值為undefined或null則將右側(cè)值賦值給左側(cè)變量。
const name = obj.name?? 'mx'; // 若obj中存在name則name為obj.name的值否則則為mx。
?.符號(hào)用于判斷某個(gè)對(duì)象的某個(gè)屬性是否存在,若存在則返回該屬性值,若不存在則返回undefined。防止引用對(duì)象為undefined或null時(shí)報(bào)錯(cuò)
let obj; // 此時(shí)obj未賦值,故為undefined const name = obj?.name // name為undefined而不會(huì)報(bào)錯(cuò)。
?.可以在對(duì)象不存在時(shí)返回undefined,而??可以在左側(cè)值為undefined時(shí)返回右側(cè)的值,因此兩者可以結(jié)合使用如下
let obj; const name = obj?.name ?? 'mx'; //由于obj為undefined,因此左側(cè)值為undefined,故返回mx賦值給name const name = obj?.name || 'mx'; //當(dāng)然此處使用||也可達(dá)成同樣效果
!就是將右側(cè)值先轉(zhuǎn)化為bool值后在進(jìn)行取反,因此對(duì)于空對(duì)象或者空數(shù)組的取反取值為false,因?yàn)榭諏?duì)象或空數(shù)組轉(zhuǎn)化為bool值為true。
!!則為在一個(gè)!將右側(cè)值轉(zhuǎn)化為bool值取反后再取反。
||該運(yùn)算符取值邏輯為判斷時(shí)將值轉(zhuǎn)化為bool值判斷左側(cè)值為true or false,左側(cè)值為true則直接取左側(cè)值,為false再判斷右側(cè)為true則返回右側(cè)值都為false則返回false。
&&該運(yùn)算符取值邏輯為判斷時(shí)轉(zhuǎn)化為bool值判斷左側(cè)值為true or false,左側(cè)值為false則直接返回false,左側(cè)值為true再判斷右側(cè),右側(cè)為false則仍為false,為true則返回右側(cè)值。
console.log(1 && 2) // 返回2 console.log(1 || 2) // 返回1
?:該運(yùn)算符通過(guò)判斷?前面的值為true or false 來(lái)決定返回:左右的值。
const name = true ? 'mx' : 'mxa' // 返回mx,若前面值為false則返回mxa
順便記錄一下一些true或false的轉(zhuǎn)換判斷。
空對(duì)象與空數(shù)組在進(jìn)行bool類(lèi)型轉(zhuǎn)換時(shí)是轉(zhuǎn)化為true值,但在進(jìn)行number類(lèi)型轉(zhuǎn)換時(shí)轉(zhuǎn)換為0。y因此會(huì)有以下現(xiàn)象
console.log(!{} == true); // 判斷為false,!{},{}首先轉(zhuǎn)換為true,再取反為false console.log({} == true); // 判斷也為false,{}轉(zhuǎn)換為0,true轉(zhuǎn)換為1,因此為false
null==undefined比較為true,null以及undefined任意一個(gè)單獨(dú)與true或false==比較取值都為false。
?. 和 ?? 的區(qū)別
?.
是可選鏈運(yùn)算符,用于訪問(wèn)一個(gè)可能為空或者未定義的對(duì)象的屬性,如果對(duì)象為空或者未定義,它會(huì)返回undefined
,而不會(huì)拋出錯(cuò)誤。 例如,如果obj
是一個(gè)對(duì)象,那么obj?.name
會(huì)返回obj
的name
屬性,如果obj
是null
或者undefined
,那么obj?.name
會(huì)返回undefined
。??
是空值合并運(yùn)算符,它用于提供一個(gè)默認(rèn)值,當(dāng)左邊的表達(dá)式為null
或者undefined
時(shí),它會(huì)返回右邊的表達(dá)式的值,否則返回左邊的表達(dá)式的值。例如,如果x
是一個(gè)變量,那么x ?? 0
會(huì)返回x
的值,如果x
是null
或者undefined
,那么x ?? 0
會(huì)返回0
。
?? 和 || 的區(qū)別
??
只會(huì)在左邊的表達(dá)式為null
或者undefined
時(shí),返回右邊的表達(dá)式的值,否則返回左邊的表達(dá)式的值。這意味著,如果左邊的表達(dá)式是一個(gè)假值,例如false
、0
、""
等,它仍然會(huì)被返回。||
會(huì)在左邊的表達(dá)式為任何假值時(shí),返回右邊的表達(dá)式的值,否則返回左邊的表達(dá)式的值。這意味著,如果左邊的表達(dá)式是一個(gè)真值,例如true
、1
、"hello"
等,它會(huì)被返回。
總結(jié)
到此這篇關(guān)于前端常用判斷符號(hào)??,?. ,! ,!! ,|| ,&&,?:的文章就介紹到這了,更多相關(guān)前端常用判斷符號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript獲取checkbox復(fù)選框獲取選中的選項(xiàng)
這篇文章主要介紹了javascript獲取checkbox復(fù)選框獲取選中的選項(xiàng)的方法,需要的朋友可以參考下2014-08-08JS中循環(huán)遍歷數(shù)組的幾種常用方式總結(jié)
文章主要總結(jié)了?JS?中循環(huán)遍歷數(shù)組的十二種常用方式,包括?for?循環(huán)(普通和優(yōu)化版)、forEach、map、filter、for…of、for…in、find、findIndex、some、every、reduce?等,并對(duì)它們的特點(diǎn)、語(yǔ)法、優(yōu)缺點(diǎn)、適用場(chǎng)景及返回值等進(jìn)行了詳細(xì)說(shuō)明,需要的朋友可以參考下2025-01-01js實(shí)現(xiàn)鍵盤(pán)Enter鍵提交表單的方法
這篇文章主要介紹了js實(shí)現(xiàn)鍵盤(pán)Enter鍵提交表單的方法,涉及javascript鍵盤(pán)事件的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05對(duì)象特征檢測(cè)法判斷瀏覽器對(duì)javascript對(duì)象的支持
就是將需要檢測(cè)的方法/對(duì)象作為if語(yǔ)句的判斷條件,具體做法如下2009-07-07jQuery設(shè)置和獲取select、checkbox、radio的選中值方法
select、checkbox、radio是很常用的表單控件,這篇文章主要介紹了jQuery設(shè)置和獲取select、checkbox、radio的選中值方法,有興趣的可以了解一下。2017-01-01js中浮點(diǎn)型運(yùn)算BUG的解決方法說(shuō)明
本篇文章主要是對(duì)js中浮點(diǎn)型運(yùn)算BUG的解決方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01uniapp在開(kāi)發(fā)app時(shí)上傳文件時(shí)的問(wèn)題記錄
在開(kāi)發(fā)uniapp應(yīng)用時(shí),可能會(huì)遇到文件上傳功能在iOS和部分Android手機(jī)上不兼容的問(wèn)題,經(jīng)過(guò)對(duì)比分析,發(fā)現(xiàn)問(wèn)題可能出在文件的路徑上,通過(guò)使用uni.saveFile方法保存文件后,再上傳可以解決問(wèn)題,這篇文章詳細(xì)介紹了解決方案,并引導(dǎo)讀者參考更多相關(guān)內(nèi)容2024-09-09