摘要:注意,三目運(yùn)算符中和是成對(duì)出現(xiàn)的,最起碼數(shù)量上,有幾個(gè)就會(huì)有幾個(gè)
三目運(yùn)算符相信大家都很熟悉了:
foo ? "foo == true" : "foo == false"
而三目運(yùn)算符?:?:?.....的調(diào)用方式大家也不陌生, 就相當(dāng)于一堆if - else if語(yǔ)句:
foo ? "foo == true" : bar ? "bar == true" : "bar == false"
但是在zepto.js里有一段代碼:
slice.call( isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn"t have getElementsByClassName/TagName maybeClass ? element.getElementsByClassName(nameOnly) : // If it"s simple, it could be a class element.getElementsByTagName(selector) : // Or a tag element.querySelectorAll(selector) // Or it"s not simple, and we need to query all )
這里的三目運(yùn)算符用的是??::的形式,我搞不太懂,所以打算做個(gè)實(shí)驗(yàn)搞懂它:
var bool1 = true, bool2 = true, val1 = "val1", val2 = "val2", val3 = "val3"; console.log(bool1 ? bool2 ? val1 : val2 : val3);
用表格記錄下4個(gè)不同點(diǎn)情況:
bool1 bool2 值 true true val1 true false val2 false true val3 false false val3
可以看出上面的代碼等價(jià)于:
console.log(bool1 ? ( bool2 ? val1 : val2 ) : val3);
條件(三元)運(yùn)算符 -mdn上說(shuō)三目運(yùn)算符具有右結(jié)合性,根據(jù)以上兩個(gè)例子,我總結(jié)三目運(yùn)算符右結(jié)合性的意思是:
從最右邊取":", 然后看它左邊相鄰的符號(hào),如果是"?",那么它和這個(gè)"?"結(jié)合起來(lái),可以用一個(gè)()把它倆包住;如果左邊相鄰的符號(hào)是":",那么取左邊的":",再重復(fù)這個(gè)判斷.比如:
?:?:?:?:?:
可以取為
?:(?:(?:(?:(?:))))
而
???:::
可以取為
?(?(?:):):
然后根據(jù)你加上的括號(hào),可以寫(xiě)出等價(jià)的if判斷語(yǔ)句,這樣就能理解復(fù)雜三目運(yùn)算符所包含的意義了。
注意,三目運(yùn)算符中"?"和":"是成對(duì)出現(xiàn)的,最起碼數(shù)量上,有幾個(gè)"?"就會(huì)有幾個(gè)":".
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/82352.html
摘要:布爾,值為或數(shù)字,值為任何整數(shù)或浮點(diǎn)數(shù)數(shù)字符串,值為由單引號(hào)或雙引號(hào)括出的單個(gè)字符或連續(xù)字符空類型,其僅有一個(gè)值未定義,其僅有一個(gè)值原始類型的值是直接保存在變量中,用進(jìn)行驗(yàn)證。 數(shù)據(jù)類型 在JavaScript中,數(shù)據(jù)類型有兩種類型: 1.原始類型:值直接保存在變量本地的數(shù)據(jù)類型。 boolean:布爾,值為true或false number:數(shù)字,值為任何整數(shù)或浮點(diǎn)數(shù)數(shù) string...
摘要:強(qiáng)制類型轉(zhuǎn)換下標(biāo)運(yùn)算符變量與常量常量是在程序中的不會(huì)變化的數(shù)據(jù)變量其實(shí)就是內(nèi)存中的一個(gè)存儲(chǔ)空間,用于存儲(chǔ)數(shù)據(jù)。表示結(jié)束本次循環(huán),繼續(xù)下次循環(huán)。 Java知識(shí)點(diǎn)總結(jié) (基本語(yǔ)法) @(Java知識(shí)點(diǎn)總結(jié))[Java, Java基本語(yǔ)法] @(Java開(kāi)發(fā))[Java基本語(yǔ)法] [toc] Java特點(diǎn) 簡(jiǎn)單自然平臺(tái)可移植性支持函數(shù)式編程JIT 編譯更好的并發(fā)編程健壯安全 執(zhí)行方式 編譯...
摘要:但是,三目運(yùn)算符也是有一定的語(yǔ)言規(guī)范的。一三目運(yùn)算符對(duì)于條件表達(dá)式,先計(jì)算條件,然后進(jìn)行判斷。那么,這段代碼為什么會(huì)自動(dòng)拆箱呢這其實(shí)是三目運(yùn)算符的語(yǔ)法規(guī)范。所以,結(jié)果就是由于使用了三目運(yùn)算符,并且第二第三位操作數(shù)分別是基本類型和對(duì)象。 三目運(yùn)算符是我們經(jīng)常在代碼中使用的,a= (b==null?0:1);這樣一行代碼可以代替一個(gè)if-else,可以使代碼變得清爽易讀。 但是,三目運(yùn)算符...
摘要:因?yàn)榧臃ǖ膬?yōu)先級(jí)比條件運(yùn)算符高,所以先運(yùn)算加號(hào),是字符串拼接,結(jié)果是非空字符串,在中字符串的布爾類型為。知識(shí)點(diǎn)三目運(yùn)算為真執(zhí)行為假執(zhí)行運(yùn)算優(yōu)先級(jí)在中布爾類型只有以下種情況為假,其他都為真。 一、測(cè)試題 原題:以下代碼的輸出是? var val = false; alert(val is + val ? true : false); 解析: 1. 此題考察的知識(shí)點(diǎn): 三目運(yùn)算、**運(yùn)...
閱讀 1863·2021-11-25 09:43
閱讀 15728·2021-09-22 15:11
閱讀 2694·2019-08-30 13:19
閱讀 2070·2019-08-30 12:54
閱讀 1885·2019-08-29 13:06
閱讀 1008·2019-08-26 14:07
閱讀 1666·2019-08-26 10:47
閱讀 3116·2019-08-26 10:41