Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个真(?)条件运算符的Javascript三值运算符_Javascript_Conditional_Operators_Ternary Operator - Fatal编程技术网

具有两个真(?)条件运算符的Javascript三值运算符

具有两个真(?)条件运算符的Javascript三值运算符,javascript,conditional,operators,ternary-operator,Javascript,Conditional,Operators,Ternary Operator,有人能帮忙替换吗?到那时请输入下面的代码好吗 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 返回e=this.checked?i-n>0?0:i-n0?0….。这是什么意思 感谢插入括号和缩进,您的代码相当于: return e = this.checked ? ( 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
返回e=this.checked?i-n>0?0:i-n<10?10:i-n:i-n<0?10:i-n>10?0:10+i-n
我特别困惑于什么?接着是另一个?在语句的开头
返回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
  )
);
返回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(选中此选项){
如果(i-n>0){
返回0
}否则{
if(i-n<10){
返回10
}否则{
返回i-n
}
}
}否则{
if(i-n<0){
返回10
}否则{
如果(i-n>10){
返回0
}否则{
返回10+i-n
}
}
}

为了使代码更具可读性,您可以随时在代码中添加括号,如下所示

返回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
这里,如果
条件
的计算结果为
true
,将执行
a
,如果计算结果为
false
,将触发
b

所以,在单独的三元运算符周围放上括号可以帮助你把事情弄清楚

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

嵌套的ternaries是不可读的,它并没有那么难读,您只需遵循以下步骤:如果条件?当为真时:当为假时。在false语句中,添加另一个条件是类似if(){}else{if(){}的结构。您能解释一下这段代码为什么以及如何回答这个问题吗?
的混乱之处:运算符可以通过使用括号来解决,所以我这样做了。请不要误会,您的代码似乎可以工作,但可读性不强,因此需要解释作为答案的编辑。问题及其答案应使人们能够解决相同或类似的问题,而不必问相同的问题(重复)。你能详细解释一下你是如何解决
?@deHaar的困惑的吗?谢谢你的评论,我会更仔细地回答,让我的答案更具可读性和可理解性,因为你可以告诉我,我是stackflow的新手。
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 (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;
    }
  }
}