細(xì)數(shù)JS中實(shí)用且強(qiáng)大的操作符&運(yùn)算符

1荔睹,前言


博主收錄了一些在實(shí)際開發(fā)過程中狸演,很實(shí)用且方便的JS操作符,熟練掌握的話僻他,不僅代碼看上去高大上(實(shí)為裝逼)宵距,而且簡潔大方。

2吨拗,代碼+應(yīng)用


2.1满哪,短路運(yùn)算符 ||

從左往右
1,只要有一個(gè)條件為true時(shí)劝篷,結(jié)果就為true哨鸭。
2,當(dāng)兩個(gè)條件都為false時(shí)娇妓,結(jié)果才為false像鸡。
3,當(dāng)一個(gè)條件為true時(shí)峡蟋,后面的條件不再判斷坟桅。

注意:當(dāng)數(shù)值參與邏輯或運(yùn)算時(shí),結(jié)果為true蕊蝗,會(huì)返回第一個(gè)為真的值仅乓;如果結(jié)果為false,會(huì)返回第二個(gè)為假的值蓬戚;

console.log( 5 || 4 );//當(dāng)結(jié)果為真時(shí)夸楣,返回第一個(gè)為真的值 所以此處打印的是5 
console.log( 0 || false );//當(dāng)結(jié)果為假時(shí),返回第二個(gè)為假的值 所以此處打印的是false

在實(shí)際開發(fā)中子漩,可以利用這一特性豫喧,實(shí)現(xiàn)如下操作。

1幢泼,給某個(gè)變量設(shè)置初始值

var name = this.name || "張三";

2紧显,判斷某個(gè)值

// 如果age等于10或者等于20或者等于30都執(zhí)行
if(age === 10 || age === 20 || age === 30){
    console.log(age)
}

2.2,短路運(yùn)算符 &&

從左往右
1缕棵,兩邊條件都為true時(shí)孵班,結(jié)果才為true。
2招驴,如果有一個(gè)為false篙程,結(jié)果就為false。
3别厘,當(dāng)?shù)谝粋€(gè)條件為false時(shí)虱饿,就不再判斷后面的條件。

注意:當(dāng)數(shù)值參與邏輯與運(yùn)算時(shí),結(jié)果為true氮发,那么會(huì)返回的會(huì)是第二個(gè)為真的值渴肉;如果結(jié)果為false,返回的會(huì)是第一個(gè)為假的值

在實(shí)際開發(fā)中折柠,可以利用這一特性宾娜,實(shí)現(xiàn)如下操作批狐。

1扇售,如果某個(gè)值為true,則運(yùn)行某個(gè)function

function pdd(){
   console.log("我是鵬多多");
};
var type = true;
type && pdd();//此時(shí)會(huì)執(zhí)行pdd方法嚣艇,打印出"我是鵬多多";

2承冰,判斷某個(gè)值

//如果age大于10并且小于20才會(huì)執(zhí)行
if(age > 10 && age < 20){
    console.log(age)
}

2.3,零合并操作符 ??

零合并操作符 ?? 是一個(gè)邏輯操作符食零,當(dāng)左側(cè)的操作數(shù)為 null 或者 undefined 時(shí)困乒,返回右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)贰谣。
空值合并操作符一般用來為常量提供默認(rèn)值娜搂,保證常量不為 null 或者 undefined,以前一般使用|| 來做這件事吱抚,比如本文2.1章的例子百宇。然而,由于 || 是一個(gè)布爾邏輯運(yùn)算符秘豹,左側(cè)的操作數(shù)會(huì)被強(qiáng)制轉(zhuǎn)換成布爾值用于求值携御。任何假值0''既绕, NaN啄刹, nullundefined都不會(huì)被返回凄贩。這導(dǎo)致如果你使用 0誓军、''NaN 作為有效值疲扎,就會(huì)出現(xiàn)不可預(yù)料的后果昵时。正因?yàn)?|| 存在這樣的問題,而 ?? 的出現(xiàn)就是解決了這些問題评肆,?? 只會(huì)在左側(cè)為 undefined债查、null 時(shí)才返回后者,?? 可以理解為是 || 的完善解決方案瓜挽。

在實(shí)際開發(fā)中盹廷,可以利用這一特性,實(shí)現(xiàn)如下操作久橙。

1俄占,給某個(gè)變量設(shè)置初始值

undefined ?? '默認(rèn)值'      //打印出 '默認(rèn)值'
null ?? '默認(rèn)值'          //打印出 '默認(rèn)值'
false ?? '默認(rèn)值'        //打印出 'false'
0 ?? '默認(rèn)值'           //打印出 0
NaN ?? '默認(rèn)值'        //打印出 NaN
'' ?? '默認(rèn)值'        //打印出 ''

2管怠,在賦值的時(shí)候,可以運(yùn)用賦值運(yùn)算符的簡寫 ??=

let pdd = {a: null, b: 10}
pdd.a ??= 20
pdd.b ??= 20
console.log(pdd)     // 輸出 { a: 20, b: 10 }

2.4缸榄,可選鏈操作符 ?.

可選鏈操作符 ?. 允許讀取位于連接對象鏈深處的屬性的值渤弛,而不必驗(yàn)證鏈中的每個(gè)引用是否有效。?. 操作符的功能類似于.鏈?zhǔn)讲僮鞣醮煌幵谟谒希谝脼?code>null或者undefined的情況下不會(huì)引起錯(cuò)誤,該表達(dá)式短路返回值是undefined鹰贵。

在實(shí)際開發(fā)中晴氨,可以利用這一特性,實(shí)現(xiàn)如下操作碉输。

1籽前,當(dāng)嘗試訪問可能不存在的對象屬性時(shí)

var obj = {
    a: '張三',
    b: {
        c: '李四'
    }
};
console.log(obj.b?.c)         // 輸出 李四
console.log(obj.age?.c)      // 輸出 undefined
console.log(obj.name?.())   // 不報(bào)錯(cuò),輸出 undefined

2敷钾,在不確定的情況下獲取一個(gè)深度嵌套的子屬性

var obj = {
    a:'李四',
    b:'王五',
    c:{
        name:"你猜我有沒有"
    }
};
//原本的寫法
if(obj && obj.c && obj.c.name){
    console.log("哈哈哈")
};
//使用可選鏈操作符的寫法
if(obj?.c?.name){
    console.log("哈哈哈")
};

2.5枝哄,位運(yùn)算符 & 和 |

位運(yùn)算符是按位進(jìn)行運(yùn)算,& 與阻荒、| 或挠锥,使用位運(yùn)算符時(shí)會(huì)拋棄小數(shù)位,我們可以利用| 0來給數(shù)字取整财松。也可以使用 & 1來判斷奇偶數(shù)

在實(shí)際開發(fā)中瘪贱,可以利用這一特性,實(shí)現(xiàn)如下操作辆毡。

1菜秦,取整

1.3 | 0          // 打印出 1
-1.9 | 0        // 打印出 -1

2,判斷奇偶數(shù)

var num = 5
!!(num & 1)                    // true
!!(num % 2)                    // true

2.6舶掖,雙位運(yùn)算符 ~~

可以使用雙位操作符來替代正數(shù)的 Math.floor( )球昨,替代負(fù)數(shù)的 Math.ceil( )。雙否定位操作符的優(yōu)勢在于它執(zhí)行相同的操作運(yùn)行速度更快眨攘,對正數(shù)來說~~運(yùn)算結(jié)果與 Math.floor( ) 運(yùn)算結(jié)果相同主慰,而對于負(fù)數(shù)來說與 Math.ceil( ) 的運(yùn)算結(jié)果相同。

在實(shí)際開發(fā)中鲫售,可以利用這一特性共螺,實(shí)現(xiàn)如下操作。

1情竹,取整

Math.floor(3.9) === 3      // true
~~3.9 === 3               // true
Math.ceil(-4.5) === -4   // true
~~-4.5 === -4           // true

2.7藐不,邏輯運(yùn)算符 !

!,可將變量轉(zhuǎn)換成boolean類型,null雏蛮、undefined和空字符串''取反都為true涎嚼,其余都為false。一般來說會(huì)有好幾種用法挑秉,!法梯,!!!=犀概,!==立哑,下面來逐個(gè)說明。

在實(shí)際開發(fā)中阱冶,可以利用這一特性刁憋,實(shí)現(xiàn)如下操作滥嘴。

1木蹬,利用!取反

let a = false;
console.log(!a);   //打印出true

在vue.js中,利用這一特性很容易就可以寫一個(gè)開關(guān)函數(shù)

<div v-show="isShow">我是一個(gè)DIV</div>
show(){
    this.isShow = !this.isShow;
};

2若皱,利用!!來做類型判斷镊叁,判斷變量a不等于nullundefined''才能執(zhí)行的方法

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

實(shí)際上我們只需要寫一個(gè)判斷表達(dá)

if(!!a){
    //a有內(nèi)容才執(zhí)行的代碼...  
}

3走触,利用!=!==來判斷兩個(gè)值是否相等

一般來說都是用的全不等于!==晦譬,因?yàn)槭褂貌坏扔?code>!=的話,0 != ""返回的是false互广,原因是JS0''轉(zhuǎn)化成布爾型都為false敛腌,所以推薦還是使用全不等于!==

var a = 0;
var b = 0;
var c = "0";
var d = '';
a != b       //false
a != c      // false    number和string的0 被判斷為相等
a != d      // false    0和空字符串被判斷為相等

a !== b    // false
a !== c   // true
a !== d   // true

(!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]惫皱,打印一下看看你得到了什么像樊?


如果看了覺得有幫助的,我是@鵬多多11997110103旅敷,歡迎 點(diǎn)贊 關(guān)注 評論生棍;
END

往期文章

個(gè)人主頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者媳谁。
  • 序言:七十年代末涂滴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晴音,更是在濱河造成了極大的恐慌柔纵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锤躁,死亡現(xiàn)場離奇詭異搁料,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門加缘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸭叙,“玉大人,你說我怎么就攤上這事拣宏∩虮矗” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵勋乾,是天一觀的道長宋下。 經(jīng)常有香客問我,道長辑莫,這世上最難降的妖魔是什么学歧? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮各吨,結(jié)果婚禮上枝笨,老公的妹妹穿的比我還像新娘。我一直安慰自己揭蜒,他們只是感情好横浑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屉更,像睡著了一般徙融。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瑰谜,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天欺冀,我揣著相機(jī)與錄音,去河邊找鬼萨脑。 笑死隐轩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砚哗。 我是一名探鬼主播龙助,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛛芥!你這毒婦竟也來了提鸟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤仅淑,失蹤者是張志新(化名)和其女友劉穎称勋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涯竟,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡鲜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年空厌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银酬。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘲更,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揩瞪,到底是詐尸還是另有隱情赋朦,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布李破,位于F島的核電站宠哄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嗤攻。R本人自食惡果不足惜毛嫉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妇菱。 院中可真熱鬧承粤,春花似錦、人聲如沸恶耽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偷俭。三九已至,卻和暖如春缰盏,著一層夾襖步出監(jiān)牢的瞬間涌萤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工口猜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留负溪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓济炎,卻偏偏與公主長得像川抡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子须尚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容