運算符&&的三個不同層次
運算符可以從三個不同的層次進行理解。
第一層理解
當(dāng)操作數(shù)都是布爾值時,“&&”對兩個值執(zhí)行布爾與(AND)操作。
x==0 && y==0 // 只有當(dāng)x和y都是0時,才返回true
關(guān)系運算符的優(yōu)先級比”&&”要高。
第二層理解
”&&“可以對真值和假值進行布爾與(AND)操作。(假值有false、null、undefined、0、NaN和”“)。在JS中任何希望使用布爾值的地方,表達(dá)式和語句都會將其當(dāng)做真值或假值來對待,因此實際上”&&”并不總是返回true和false。
null && true // =>null: 左操作數(shù)為假值,并將其返回,整個表達(dá)式為假
true && (5 - 3) // =>2: 左操作數(shù)為真,計算右操作數(shù),并將其結(jié)果返回
第三層理解
當(dāng)運算符要返回一個真值或假值時,根據(jù)左操作數(shù)的值會遇到兩種運算情況:運算符首先計算左操作數(shù)的值,如果計算結(jié)果是假值,那么整個表達(dá)式的結(jié)果一定也是假值,此時”&&“簡單的返回左操作數(shù)的值,而并不會對右操作數(shù)進行計算。如果左操作數(shù)是真值,”&&“將計算右操作數(shù)的值并將其返回作為整個表達(dá)式的計算結(jié)果。
var o = {x:1};
var p = null;
o && o.x; // =>1 o是真值,返回o.x的值
p && p.y; // =>null: p是假值,將其返回,而不去計算p.y
”&&“的行為有時稱作”短路“,我們將會看到很多代碼利用了這一特性進行有條件地執(zhí)行代碼。例如下面兩行代碼是完全等價的:
if(a == b) stop();
(a == b) && stop();// 與上面語句等價
知識延伸
運算符“||”和”&&”一樣也具有一些復(fù)雜的行為。
用來從一組備選表達(dá)式中選出第一個真值表達(dá)式:
// 先檢查a是否是真值,如果是,返回a,否則和a處理方式相同地處理b
// 如果b是真值返回b,否則返回5
var max = a || b || 5;
這種用法在函數(shù)中可以用來給參數(shù)提供默認(rèn)值:
function copy(o, p) {
p = p || {}; // 如果沒有向參數(shù)p傳遞對象,就使用新創(chuàng)建的對象
// ...
}
運算符優(yōu)先級
同一優(yōu)先級的運算符,運算次序由結(jié)合方向所決定。
簡單記就是:! > 算術(shù)運算符 > 關(guān)系運算符 > && > || > 賦值運算符
相關(guān)文章
javascript開發(fā)技術(shù)大全 第2章 開始JAVAScript之旅
1st JavaScript Editor ,除了有著色處,還有html標(biāo)簽、屬性、javascript事件、函數(shù),另外還可調(diào)用外部編輯來編輯網(wǎng)頁,也可將常用瀏覽器內(nèi)置在窗口中。2011-07-07關(guān)于js的三種使用方式(行內(nèi)js、內(nèi)部js、外部js)的程序代碼
本文主要和大家介紹關(guān)于js的三種使用方式(行內(nèi)js、內(nèi)部js、外部js)的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家2018-05-05Javascript基礎(chǔ)教程之關(guān)鍵字和保留字匯總
這篇文章主要介紹了Javascript基礎(chǔ)教程之關(guān)鍵字和保留字匯總,需要的朋友可以參考下2015-01-01javascript之函數(shù)直接量(function(){})()
javascript之函數(shù)直接量(function(){})()...2007-06-06