11

这段代码代表什么?我知道这是某种if替代语法...

pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'

这种编码需要什么?这是更高效还是只是具有相同效率的缩短版本?

4

5 回答 5

38

它是条件运算符,它相当于这样的东西:

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才会分配给变量。scorefalsenullundefined0NaN

否则,如果它是虚假的,'0'将被分配。

性能将是相当的,您应该专注于可读性。我尝试在非常简单的表达式上使用三元运算符,您还可以改进格式,将其分成两行以使其更具可读性:

var status = (age >= 18) ? "adult"
                         : "minor";

相关问题:

于 2009-11-06T15:35:27.037 回答
5

这是一个三元运算符,一种执行 if 语句的简写方式。

如果重新编写,它将如下所示:

if (pattern.Gotoccurance.score != null) {
   return pattern.Gotoccurance.score;
} else {
   return '0';
}
于 2009-11-06T15:36:50.607 回答
2

它被称为三元运算符。

于 2009-11-06T15:35:53.763 回答
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;
}

与某些替代方案相比,此解决方案看起来非常优雅且易于阅读。

于 2009-11-06T17:48:52.170 回答
0

它是三元运算符/条件运算符。

在数学中,三元运算是 n = 3 的 n 元运算。对集合 A 的三元运算采用 A 的任意给定三个元素并将它们组合成 A 的单个元素。

它是if..else的简写形式。

例如,想知道一个数字是否是偶数。

使用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..elseswitch,因为在三元中将失去可读性。

例如,使用三元运算符很容易获得两个数字的最小值或最大值,但在三个或更多数字中找到最大和第二大变得很笨拙,甚至不推荐使用。最好使用if..else代替。

于 2009-11-08T06:31:50.827 回答