具有两个true(?)条件运算符的Javascript三元运算符

时间:2019-02-27 10:01:04

标签: javascript conditional operators ternary-operator

有人可以代替吗?请在下面的代码中使用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 .....的开头。是什么意思?

谢谢

3 个答案:

答案 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和this tool

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
    }
  }
}

答案 1 :(得分: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) )

或按照@Nick Parsons的回答分成不同的部分。

答案 2 :(得分:0)

如果将三元分解成单独的部分,这可能会很有用。本质上,它具有以下基本结构:

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 (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; } } }

或者,如果将其转换为if语句,则可能会更容易理解:

pipeline {
    agent none
    stages {
        stage('Test') {
            parallel {
                stage('Test On dev6') {
                    agent {
                        label "dev6"
                    }
                    steps {
                        xyz()
                    }
                }
                stage('Test On dev7') {
                    agent {
                        label "dev7"
                    }
                    steps {
                        xyz()
                    }
                }
            }
        }
    }