運(yùn)算符&&的三個(gè)不同層次
運(yùn)算符可以從三個(gè)不同的層次進(jìn)行理解。
第一層理解
當(dāng)操作數(shù)都是布爾值時(shí),“&&”對(duì)兩個(gè)值執(zhí)行布爾與(AND)操作。
x==0 && y==0 // 只有當(dāng)x和y都是0時(shí),才返回true
關(guān)系運(yùn)算符的優(yōu)先級(jí)比”&&”要高。
第二層理解
”&&“可以對(duì)真值和假值進(jìn)行布爾與(AND)操作。(假值有false、null、undefined、0、NaN和”“)。在JS中任何希望使用布爾值的地方,表達(dá)式和語(yǔ)句都會(huì)將其當(dāng)做真值或假值來(lái)對(duì)待,因此實(shí)際上”&&”并不總是返回true和false。
null && true // =>null: 左操作數(shù)為假值,并將其返回,整個(gè)表達(dá)式為假
true && (5 - 3) // =>2: 左操作數(shù)為真,計(jì)算右操作數(shù),并將其結(jié)果返回
第三層理解
當(dāng)運(yùn)算符要返回一個(gè)真值或假值時(shí),根據(jù)左操作數(shù)的值會(huì)遇到兩種運(yùn)算情況:運(yùn)算符首先計(jì)算左操作數(shù)的值,如果計(jì)算結(jié)果是假值,那么整個(gè)表達(dá)式的結(jié)果一定也是假值,此時(shí)”&&“簡(jiǎn)單的返回左操作數(shù)的值,而并不會(huì)對(duì)右操作數(shù)進(jìn)行計(jì)算。如果左操作數(shù)是真值,”&&“將計(jì)算右操作數(shù)的值并將其返回作為整個(gè)表達(dá)式的計(jì)算結(jié)果。
var o = {x:1};
var p = null;
o && o.x; // =>1 o是真值,返回o.x的值
p && p.y; // =>null: p是假值,將其返回,而不去計(jì)算p.y
”&&“的行為有時(shí)稱(chēng)作”短路“,我們將會(huì)看到很多代碼利用了這一特性進(jìn)行有條件地執(zhí)行代碼。例如下面兩行代碼是完全等價(jià)的:
if(a == b) stop();
(a == b) && stop();// 與上面語(yǔ)句等價(jià)
知識(shí)延伸
運(yùn)算符“||”和”&&”一樣也具有一些復(fù)雜的行為。
用來(lái)從一組備選表達(dá)式中選出第一個(gè)真值表達(dá)式:
// 先檢查a是否是真值,如果是,返回a,否則和a處理方式相同地處理b
// 如果b是真值返回b,否則返回5
var max = a || b || 5;
這種用法在函數(shù)中可以用來(lái)給參數(shù)提供默認(rèn)值:
function copy(o, p) {
p = p || {}; // 如果沒(méi)有向參數(shù)p傳遞對(duì)象,就使用新創(chuàng)建的對(duì)象
// ...
}
運(yùn)算符優(yōu)先級(jí)
同一優(yōu)先級(jí)的運(yùn)算符,運(yùn)算次序由結(jié)合方向所決定。
簡(jiǎn)單記就是:! > 算術(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > && > || > 賦值運(yùn)算符
相關(guān)文章
js關(guān)于字符長(zhǎng)度限制的問(wèn)題示例探討
字符長(zhǎng)度限制在某些特殊的使用場(chǎng)合還是比較實(shí)用的,下面為大家用示例探討下,感興趣的朋友可以參考下2014-01-01
解析js中獲得父窗口鏈接getParent方法以及各種打開(kāi)窗口的方法
本篇文章是對(duì)js中獲得父窗口鏈接getParent方法以及各種打開(kāi)窗口的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Javascript學(xué)習(xí)筆記之?dāng)?shù)組的遍歷和 length 屬性
我們一般用循環(huán)來(lái)遍歷數(shù)組,而循環(huán)一直是 JavaScript 性能問(wèn)題的常見(jiàn)來(lái)源,有時(shí)循環(huán)用得不好會(huì)嚴(yán)重降低代碼的運(yùn)行速度。數(shù)組的屬性可以分為三種:length屬性,索引屬性,其他屬性.和普通對(duì)象相比,數(shù)組對(duì)象特殊的地方就是它的length屬性和索引屬性。2014-11-11
Javascript的時(shí)間戳和php的時(shí)間戳轉(zhuǎn)換注意事項(xiàng)
需要注意的是js的時(shí)間戳是13位,php的時(shí)間戳是10位,轉(zhuǎn)換函數(shù)如下,感興趣的朋友可以參考下哈2013-04-04
帶你了解session和cookie作用原理區(qū)別和用法
這篇文章主要介紹了session和cookie作用原理,區(qū)別和用法,以及使用過(guò)程中的優(yōu)缺點(diǎn),通過(guò)列舉區(qū)別和原理,使讀者更能理解兩者之間的關(guān)系,需要的朋友可以參考下2017-08-08
javascript 數(shù)組的正態(tài)分布排序的問(wèn)題
這篇文章主要介紹了javascript 數(shù)組的正態(tài)分布排序的問(wèn)題的相關(guān)資料,需要的朋友可以參考下2016-07-07
JavaScript對(duì)內(nèi)存分配及管理機(jī)制詳細(xì)解析
本文主要講述了JavaScript的垃圾回收原理和具體的過(guò)程。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11

