JavaScript,如果替代的[重复]
-
18-09-2019 - |
题
这个问题已经有一个答案在这里:
- 标记问题和结肠JavaScript 7的答案
这是什么代码代表什么?我知道这是某种 if
替代法...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
更新:
有什么需要为这种编码?是这个效率更高的或者只是一个缩短的版本相同的效率?
解决方案
它是的 有条件的 操作者,它相当于事情是这样的:
if (pattern.Gotoccurance.score != null) {
pattern.Gotoccurance.score;
} else {
'0';
}
但我认为,一个分配声明中缺少代码的发布,是这样的:
var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';
的 score
变量将被分配如果 pattern.Gotoccurance.score
不是空:
var score;
if (pattern.Gotoccurance.score != null) {
score = pattern.Gotoccurance.score;
} else {
score = '0';
}
一个共同的图案来做这样的'默认值的任务在JavaScript是使用该逻辑或操作员(||
) :
var score = pattern.Gotoccurance.score || '0';
值 pattern.Gotoccurance.score
将被分配到 score
可变的,如果只值不是 falsy (falsy值 false
, null
, undefined
, 0
, 长度为零或串 NaN
).
否则,如果它falsy '0'
将被分配。
更新: 性能将相当,你应该专注于可读性,我尝试使用了三操作者在发表的非常简单的,你还可以改善的格式,分成两条线,使其更具可读性:
var status = (age >= 18) ? "adult"
: "minor";
相关的问题:
其他提示
这是一个 三操作员, 一缺兵少将的方式来做到如果发言。
如果重新编写,它将是这样的:
if (pattern.Gotoccurance.score != null) {
return pattern.Gotoccurance.score;
} else {
return '0';
}
这就是所谓的三操作员。
对问题的更新"为什么需要为这种编码?"
你有时可以使用的三元操作,以减少复杂性:
例如,我有一个网页,所需要的验证 至少 三分之二的特定文本领域的有价值。如果/else逻辑看上去很丑,但三操作者的一个衬垫,以确定如何许多领域充满了:
var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
(lastName.length > 0 ? 1 : 0) +
(zipCode.length > 0 ? 1 : 0) );
if (numberFilledInFields < 2)
{
validation = false;
return;
}
这种解决出现的很优雅和易于读取比一些替代品。
这是三操作员/有条件的操作员。
在数学, 三操作 是n-ary作n=3。三操作上设置一个需要任何给定的三个要素的和将它们结合成一个单一的元素A。
这是一个短期方面形式的,如果..别的
例如想要找出如果一个数字甚至是或不是
//使用,如果..别的办法
function CheckEvenOdd()
{
var number = 2;
if(number %2 == 0) alert("even");else alert("odd");
}
//使用三元
function CheckEvenOdd()
{
var number = 2;
alert((number %2 == 0)?"even":"odd");
}
一个更多的变换
//使用的开关
function CheckEvenOdd()
{
var number = 2;
switch(number %2)
{
case 0:alert("even");break;
default:alert("odd");break;
}
}
现在,如果你有一个简单的如果..别的条件来执行,如一个描述的,你可以继续与三元.
但是,如果有条件的检查变得复杂,去要么如果..别或交换为可读性将失去在三元
例如它是容易执行最低或最高的两个数字使用一个三元的操作者而变得笨拙,以找到的最大和第二大之中的3个或更多的数字,甚至没有防腐蚀设计推荐.这是更好地使用,如果..别的来代替