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