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
: (
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
}
}
}
为了使其更具可读性,您可以随时在代码中添加括号,如
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
此处,如果condition
的计算结果为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))
所以在这里:
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;
}
}
}
有人可以帮忙替换吗?请在下面的代码中使用 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
: (
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
}
}
}
为了使其更具可读性,您可以随时在代码中添加括号,如
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
此处,如果condition
的计算结果为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))
所以在这里:
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;
}
}
}