JavaScript'if'替代方案

IT技术 javascript conditional-operator
2021-03-15 08:11:58

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

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

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

5个回答

它是条件运算符,等效于以下内容:

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变量falsenullundefined0NaN

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

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

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

相关问题:

解释时间会影响性能吗?
2021-05-01 08:11:58
这是一种与众不同的答案。毫无疑问,当谈到 JavaScript 和三元运算符时。做得好 CMS。
2021-05-04 08:11:58
哦,好的gr8,为什么需要这种编码,这是更有效的还是效率相同的简化版本?
2021-05-17 08:11:58

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

如果重写,它看起来像这样:

if (pattern.Gotoccurance.score != null) {
   return pattern.Gotoccurance.score;
} else {
   return '0';
}
“三元”仅表示“具有 3 元数的函数”。……?.. : ... 是条件运算符。
2021-04-23 08:11:58

它被称为三元运算符。

它是一个三元运算符。它恰好是该语言中唯一的一个,但可能还有其他理论三元运算符。
2021-05-09 08:11:58

至于这种编码的需要:

您有时可以使用三元运算符来降低复杂性:

例如,我有一个网页需要验证三个特定文本字段中至少有两个输入了值。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的简写形式

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

使用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代替。