2009-11-06 53 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代替