[英]JS Ternary operator confusion
我現在正在學習三元運算符。 我掌握了基礎知識,但是后來我看到了這個摘要,對我來說沒有任何意義。 誰能解釋一下如何組裝?!
b.m & 4 || (c |= 2, 63 <= a && 77 >= a ? a = 65 : 48 <= a && 57 >= a ? a = 48 : c & 1 ? 97 <= a && 122 >= a ? a = 65 : 197 == a || 229 == a ? c &= 5 : 192 <= a && 687 >= a ? a = 192 : 1536 <= a ? a = 1536 : 912 <= a ? a = 912 : 160 <= a ? a = 160 : 127 <= a ? c &= 5 : 33 <= a ? a = 59 : c &= 5 : 48 > a ? c &= 5 : 65 > a ? a = 59 : 96 > a ? c &= 5 : 112 > a ? a = 96 : 187 > a ? c &= 5 : a = 59);
bm&4 || 據我所知,位運算是(c | = 2,另一個位運算,但是逗號是什么意思!
然后有63 <= a && 77> = a嗎? a = 65:48
轉化為
if(a> = 63 && a <= 77){a = 65} else {a = 48; }
然后是<= a && 57> = a嗎? a = 48:c&1? 97 <= a ,這對我完全沒有意義。 因為48是用於前面的語句。 誰能
逗號是javascript中的單獨運算符 :
逗號運算符計算兩個操作數(從左到右)並返回第二個操作數的值。
您只掌握了表達的一部分:
然后有63 <= a && 77> = a嗎? a = 65:48
實際上,它要更長一些(使用某些格式):
63 <= a && 77 >= a
? a = 65
: 48 <= a && 57 >= a
? a = 48
: c & 1
? 97 <= a && 122 >= a
? a = 65
: 197 == a || 229 == a
? c &= 5
: 192 <= a && 687 >= a
? a = 192
: 1536 <= a
? a = 1536
: 912 <= a
? a = 912
: 160 <= a
? a = 160
: 127 <= a
? c &= 5
: 33 <= a
? a = 59
: c &= 5
: 48 > a
? c &= 5
: 65 > a
? a = 59
: 96 > a
? c &= 5
: 112 > a
? a = 96
: 187 > a
? c &= 5
: a = 59
嘗試以if-else方式重寫它會產生以下結果:
if (63 <= a && 77 >= a){
a = 65
} else if (48 <= a && 57 >= a){
a = 48
} else if (c & 1){
if (97 <= a && 122 >= a){
a = 65
} else if (197 == a || 229 == a){
c &= 5
} else if (192 <= a && 687 >= a){
a = 192
} else if (1536 <= a){
a = 1536
} else if (912 <= a){
a = 912
} else if (160 <= a){
a = 160
} else if (127 <= a){
c &= 5
} else if (33 <= a){
a = 59
} else {
c &= 5
}
} else {
if (48 > a){
c &= 5
} else if (65 > a){
a = 59
} else if (96 > a){
c &= 5
} else if (112 > a){
a = 96
} else if (187 > a){
c &= 5
} else {
a = 59
}
}
請注意 ,if-else方法當前缺少返回值,而三元運算符的確返回最后執行的運算符的值(這可能會影響括號中布爾表達式的總值)。
我寧願格式化嵌套三元陳述這樣的 ,所以他們有一個簡單的,可讀的結構:
// (is this true) ? then do this
// (is this true) ? then do this
// (all else fails) : then do this
按照該結構,它看起來像這樣:
63 <= a && 77 >= a ? a = 65
: 48 <= a && 57 >= a ? a = 48
: c & 1 ? /* then go into this indented block below */
97 <= a && 122 >= a ? a = 65
: 197 == a || 229 == a ? c &= 5
: 192 <= a && 687 >= a ? a = 192
: 1536 <= a ? a = 1536
: 912 <= a ? a = 912
: 160 <= a ? a = 160
: 127 <= a ? c &= 5
: 33 <= a ? a = 59
/* else */ : c &= 5
: 48 > a ? c &= 5
: 65 > a ? a = 59
: 96 > a ? c &= 5
: 112 > a ? a = 96
: 187 > a ? c &= 5
/* final else */ : a = 59
逗號不是三元運算符,它允許兩個表達式替換一個。
但更重要的是,那是一團糟。 分解,格式化並評論。 除非您打高爾夫球,否則將所有這些組合成一堆都是在辱罵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.