我现在正在学习三元运算符。我已经掌握了基础知识,但后来我看到了这个片段,它对我来说没有任何意义。谁能解释一下它是如何组合在一起的?
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);
b.m & 4 ||据我了解,是位运算,那么(c |= 2,又一个位运算,但是逗号是什么意思?!
然后还有
63 = a ? a = 65 : 48
这翻译成
if(a >= 63 && a
然后在那之后= a ? a = 48 : c & 1 ? 97 这对我来说根本没有任何意义。因为 48 是针对前一个语句的。任何人都可以
逗号是一个单独的operator https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comma_Operator在 JavaScript 中:
逗号运算符计算其两个操作数(从左到右)
并返回第二个操作数的值。
你只掌握了表达的一部分:
那么 63 = 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
}
}
Please, 注意if-else 方法当前缺少返回值,而三元运算符确实返回最后执行的运算符的值(这可能会影响括号中布尔表达式的整体值)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)