2009-11-06 52 views
8

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

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

更新:

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

回答

34

它是conditional运营商,它相当于是这样的:

if (pattern.Gotoccurance.score != null) { 
    pattern.Gotoccurance.score; 
} else { 
    '0'; 
} 

但我认为,一个赋值语句在您发布的代码所缺少,像这样:

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

如果pattern.Gotoccurance.score不为空,则将分配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变量仅当该值(falsy值是false,nullundefined0,零长度字符串或NaN)。

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

更新:性能将相当于,你应该专注于可读性,我尝试使用三元运算上是非常简单的表达式,你也可以提高格式化,分裂它在两行进行它更易读:

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

相关问题:

+0

哦,ok gr8,为什么需要这种编码,这是更高效还是只是缩短了版本的效率? – 2009-11-06 16:00:15

+0

解释时间是否会影响性能? – barkmadley 2009-11-08 06:36:22

+0

这是一种有所作为的答案。当谈到JavaScript和三元运算符时,不要再怀疑了。做得好的CMS。 – 2012-08-09 04:12:55

2

它被称为三元运算符。

+3

它是* a *三元运算符。它恰好是语言中唯一的一个,但也可能有其他理论的三元运算符。 – 2009-11-06 15:49:48

5

这是一个ternary operator,做if语句的方式不多。

如果重新编写的,它应该是这样的:

if (pattern.Gotoccurance.score != null) { 
    return pattern.Gotoccurance.score; 
} else { 
    return '0'; 
} 
+0

+1对于说“三元”,我总是忘记这个家伙的名字:) – marcgg 2009-11-06 17:50:09

+0

“三元”只是意味着“功能与3”。 ...? ..:...是条件运算符。 – 2009-11-06 17:56:46

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; 
} 

这种解决方案显得相当优雅,易于比一些替代阅读。

0

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

在数学中,ternary operation是具有n的n进制操作= 3上的一组A A三元操作需要的任何给定的三个元素并且将它们组合以形成A.

的单个元件

它是一种简短形式的if .. else

eg想找出一个数字是偶数或不

//使用的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"); 
} 

还有一个变体切换

//使用开关

function CheckEvenOdd() 
{ 
    var number = 2; 
    switch(number %2) 
    { 
     case 0:alert("even");break; 
     default:alert("odd");break; 
    } 
} 

现在,如果你有一个简单的if..else条件来执行所描述的条件,你可以继续进行三元化。

但是,如果条件检查变得复杂,去要么的if..else或交换机为可读性将在三元

例如丢失使用三元运算符很容易执行两个数字的最小值或最大值,但在3个或更多数字中找到最大的第二大值并且甚至不推荐使用这种方法很笨拙。最好使用if..else代替