这段代码代表什么?我知道这是某种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要么切换,因为可读性将在三元中丢失。
例如,使用三元运算符很容易获得两个数字的最小值或最大值,但在三个或更多数字中找到最大和第二大就变得很笨拙,甚至不推荐使用。最好使用if..else代替。