具有两个真(?)条件运算符的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;
}
}
}