簡體   English   中英

帶有兩個真 (?) 條件運算符的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM