Javascript優(yōu)化技巧之短路表達(dá)式詳細(xì)介紹
什么是短路表達(dá)式?
短路表達(dá)式:作為"&&"和"||"操作符的操作數(shù)表達(dá)式,這些表達(dá)式在進(jìn)行求值時(shí),只要最終的結(jié)果已經(jīng)可以確定是真或假,求值過(guò)程便告終止,這稱(chēng)之為短路求值。這是這兩個(gè)操作符的一個(gè)重要屬性。
一個(gè)最簡(jiǎn)單的例子:
foo = foo||bar;
這行代碼是什么意思?答案:
//如果foo存在,值不變,否則把bar的值賦給foo
if(!foo)
foo = bar;
在javascript的邏輯運(yùn)算中,0、""、null、false、undefined、NaN都會(huì)判定為false,而其他都為true。所以在上式的foo = foo||bar;中,||先計(jì)算第一個(gè)運(yùn)算數(shù),如果可以被轉(zhuǎn)換成true,也就是表示foo已經(jīng)存在有值,那么返回左邊這個(gè)表達(dá)式的值,否則計(jì)算第二個(gè)運(yùn)算數(shù)bar。
另外,即使||運(yùn)算符的運(yùn)算數(shù)不是布爾值,仍然可以將它看作布爾OR運(yùn)算,因?yàn)闊o(wú)論它返回的值是什么類(lèi)型,都可以被轉(zhuǎn)換為布爾值。
當(dāng)然,使用如下做法會(huì)更加嚴(yán)謹(jǐn):
if(foo) //不夠嚴(yán)謹(jǐn)
if(!!foo) //更為嚴(yán)謹(jǐn),!!可將其他類(lèi)型的值轉(zhuǎn)換為boolean類(lèi)型
可以測(cè)試一下:
var foo;
var number = 1;
var string = "string";
var obj = {};
var arr = [];
console.log(typeof(foo)); // undefined
console.log(typeof(number)); //number
console.log(typeof(string)); //string
console.log(typeof(obj)); //object
console.log(typeof(arr)); //object
console.log(typeof(!!foo)); // boolean
console.log(typeof(!!number)); //boolean
console.log(typeof(!!string)); //boolean
console.log(typeof(!!obj)); //boolean
console.log(typeof(!!arr)); //boolean
利用這一點(diǎn)可以很好的符合,優(yōu)化javascript工程一文中提到的,使腳本少運(yùn)行或者不運(yùn)行,以達(dá)到優(yōu)化javascript的目的。但是需要注意的是,這樣寫(xiě)幫我們精簡(jiǎn)了代碼的同時(shí),也帶來(lái)了代碼可讀性的降低的缺點(diǎn)。所以比較好的做好是添加是適當(dāng)?shù)淖⑨尅?/p>
相關(guān)文章
JS創(chuàng)建自定義表格具體實(shí)現(xiàn)
創(chuàng)建自定義表格的方法有很多,本文為大家介紹下使用js是如何創(chuàng)建的,感興趣的朋友可以參考下2014-02-02js購(gòu)物車(chē)實(shí)現(xiàn)思路及代碼(個(gè)人感覺(jué)不錯(cuò))
提起購(gòu)物車(chē)想必只有在一些購(gòu)物網(wǎng)站上才可以看得到,下面為大家介紹下使用js實(shí)現(xiàn)的購(gòu)物車(chē),感興趣的朋友可以參考下2013-12-12實(shí)例分析js和C#中使用正則表達(dá)式匹配a標(biāo)簽
本文通過(guò)2個(gè)實(shí)例,對(duì)比分析了在js和c#中使用正則表達(dá)式匹配a標(biāo)簽的異同,小伙伴們自己參考下吧,有利于深刻理解正則表達(dá)式的使用。2014-11-11使用JS批量選中功能實(shí)現(xiàn)更改數(shù)據(jù)庫(kù)中的status狀態(tài)值(批量展示)
我們?cè)陂_(kāi)發(fā)項(xiàng)目的時(shí)候經(jīng)常會(huì)在后臺(tái)管理時(shí)用到批量展示功能來(lái)動(dòng)態(tài)的修改數(shù)據(jù)庫(kù)的值。下面以修改數(shù)據(jù)庫(kù)的status狀態(tài)值來(lái)實(shí)現(xiàn)批量展示功能2016-11-11動(dòng)態(tài)的創(chuàng)建一個(gè)元素createElement及刪除一個(gè)元素
本文用示例為大家介紹下動(dòng)態(tài)創(chuàng)建一個(gè)元素createElement及刪除一個(gè)元素,感興趣的朋友可以參考下2014-01-01頁(yè)面下沉抖動(dòng)效果-網(wǎng)站HTTP連接沒(méi)有效果-PC上有效果
頁(yè)面下沉抖動(dòng)效果實(shí)現(xiàn)代碼,代碼少,功能還可以2008-05-05JS實(shí)現(xiàn)上傳圖片的三種方法并實(shí)現(xiàn)預(yù)覽圖片功能
在用戶(hù)注冊(cè)頁(yè)面,需要用戶(hù)在本地選擇一張圖片作為頭像,并同時(shí)預(yù)覽,實(shí)現(xiàn)思路有兩種,具體實(shí)現(xiàn)方法和實(shí)例代碼大家參考下本文2017-07-07Javascript腳本獲取form和input內(nèi)容的方法(兩種方法)
隨著js的發(fā)展,許多的網(wǎng)頁(yè)數(shù)據(jù)處理完全可以由js腳本解決,而不需要發(fā)送到服務(wù)器,這里分享兩種Javascript腳本獲取form和input內(nèi)容的方法,感興趣的朋友跟隨小編一起看看吧2023-05-05