![](/img/trans.png)
[英]Operator Precedence with Ternary Conditional and Logical And operators in JavaScript
[英]Javascript ternary operator with two true (?) conditional operators
有人可以幫忙代替嗎? 由 THEN 在下面的代碼中好嗎?
return e = this.checked ? i - n > 0 ? 0 : i - n < 10 ? 10 : i - n : i - n < 0 ? 10 : i - n > 10 ? 0 : 10 + i - n
我特別困惑? 其次是另一個? 在語句的開頭return e = this.checked ? i - n > 0 ? 0 .....
return e = this.checked ? i - n > 0 ? 0 .....
return e = this.checked ? i - n > 0 ? 0 .....
這意味着什么?
謝謝
插入括號和縮進,你的代碼相當於:
return e = this.checked
? (
i - n > 0
? 0
: (
i - n < 10
? 10
: i - n
)
)
: (
i - n < 0
? 10
: (
i - n > 10
? 0
: 10 + i - n
)
);
簡而言之,在第一個表達式或第二個表達式中,您可以嵌套更多的三元運算符,因為它們也解析為表達式 - 但是,這並不意味着這是一個好主意,它非常不可讀。
使用 if-else 和這個工具:
if (this.checked) {
if (i - n > 0) {
return 0
} else {
if (i - n < 10) {
return 10
} else {
return i - n
}
}
} else {
if (i - n < 0) {
return 10
} else {
if (i - n > 10) {
return 0
} else {
return 10 + i - n
}
}
}
為了使其更具可讀性,您始終可以將括號添加到您的代碼中
return e = this.checked ? ( (i - n > 0 )? 0 : (i - n < 10 ? 10 : i - n ) ) : ( (i - n < 0) ? 10 : (i - n > 10 ? 0 : 10 + i - n) )
或分成單獨的部分作為@Nick Parsons 的回答。
如果將三元分解為單獨的部分,這可能會很有用。 本質上,它具有以下基本結構:
condition ? a : b
在這里, a
如果將執行condition
的計算結果為true
,且b
如果計算結果為將觸發false
。
因此,將括號括在單獨的三元運算符周圍可以幫助解決問題。
return e = this.checked ? (i - n > 0 ? 0 : (i - n < 10 ? 10 : i - n)) : (i - n < 0 ? 10 : (i - n > 10 ? 0 : 10 + i - n))
所以在這里:
condition
是這樣的。 this.checked
a
是(i - n > 0 ? 0 : (i - n < 10 ? 10 : i - n))
b
是(i - n < 0 ? 10 : (i - n > 10 ? 0 : 10 + i - n))
或者,如果將其轉換為 if 語句,您可能會發現更容易理解,如下所示:
if (this.checked) {
if (i - n > 0) {
return 0
} else {
if (i - n < 10) {
return 10;
} else {
return i - n;
}
}
} else {
if (i - n < 0) {
return 10;
} else {
if (i - n > 10) {
return 0;
} else {
return 10 + i - n;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.