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