这段代码代表什么?我知道这是某种if
替代语法...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
这种编码需要什么?这是更高效还是只是具有相同效率的缩短版本?
这段代码代表什么?我知道这是某种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 中进行这种“默认值”赋值的常见模式是使用逻辑 OR 运算符 ( ||
) :
var score = pattern.Gotoccurance.score || '0';
只有当该值不是假的(假值为、、、、零长度字符串或)时,该值pattern.Gotoccurance.score
才会分配给变量。score
false
null
undefined
0
NaN
否则,如果它是虚假的,'0'
将被分配。
性能将是相当的,您应该专注于可读性。我尝试在非常简单的表达式上使用三元运算符,您还可以改进格式,将其分成两行以使其更具可读性:
var status = (age >= 18) ? "adult"
: "minor";
相关问题:
这是一个三元运算符,一种执行 if 语句的简写方式。
如果重新编写,它将如下所示:
if (pattern.Gotoccurance.score != null) {
return pattern.Gotoccurance.score;
} else {
return '0';
}
它被称为三元运算符。
至于对这种编码的需求:
您有时可以使用三元运算符来降低复杂性:
例如,我有一个网页需要验证三个特定文本字段中至少有两个输入了值。if/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 = 3 的 n 元运算。对集合 A 的三元运算采用 A 的任意给定三个元素并将它们组合成 A 的单个元素。
它是if..else的简写形式。
例如,想知道一个数字是否是偶数。
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");
}
另一种变体是 switch:
function CheckEvenOdd()
{
var number = 2;
switch(number % 2)
{
case 0:
alert("even");
break;
default:
alert("odd");
break;
}
}
现在,如果您有一个简单的if..else条件来执行描述的条件,您可以继续使用三元。
但是,如果条件检查变得复杂,请使用if..else或switch,因为在三元中将失去可读性。
例如,使用三元运算符很容易获得两个数字的最小值或最大值,但在三个或更多数字中找到最大和第二大变得很笨拙,甚至不推荐使用。最好使用if..else代替。