2012-01-11 76 views
1

我有一個問題,瞭解一些JavaScript語法如下:條件語句/語法混亂

var myObject = { 
    value: 0; 
    increment: function (inc) { 
     this.value += typeof inc === 'number' ? inc : 1; 
    } 
}; 
myObject.increment(); 
document.writeln(myObject.value); // 1 
myObject.increment(2); 
document.writeln(myObject.value); // 3 

具體做法是:

this.value += typeof inc === 'number' ? inc : 1; 

是該行稱,如果:

typeof inc === 'number' 

則:

this.value += inc 

什麼好辦法去想這個或資源來幫助理解,將不勝感激。

+0

這如果「inc」是一個有效的數字,那麼使用它來增加,否則使用1.你也可以寫:this.value + =(isNaN(inc)?1:inc); – 2012-01-11 02:54:45

回答

1

這是正確的,這就是所謂的一個三元運算符。如果語句解析爲true,則它執行第一個選項,否則解析第二個選項。它可以被分解成簡單的if/else

if (typeof inc === 'number') this.value += inc; 
else this.value++; 
+0

感謝您的答覆 – zallarak 2012-01-11 03:01:52

1

這的確是說如果typeof inc === 'number'然後inc添加到this.value,否則要加1 this.value。該模式是三元運算符,如果該條件爲真,它返回:的左側,而如果:假的右側的一個例子。

三元操作有些更常用的分配,如:

// Assign the greater of y and z to x (or z if they're equal) 
var x = y > z ? y : z; 

// equivalent to: 
if (y > z) { 
    var x = y; 
} 
else var x = z; 

在這種情況下,雖然,它被用於許多返回+=運營商。

+0

感謝@邁克爾,你的解釋,你寫的代碼示例。 – zallarak 2012-01-11 03:02:27

1

這是ternary操作。

this.value += typeof inc === 'number' ? inc : 1; 

相同

if (typeof inc === 'number') { 
    this.value += inc; 
} else { 
    this.value += 1; 
} 
+0

謝謝!兩種變體都有速度優勢嗎?我猜不是,如果是這樣的話,有人剛剛進入JavaScript我會考慮採用後者作爲風格。 – zallarak 2012-01-11 03:04:22

+0

沒有速度好處,我也會使用後者。它更具可讀性。 – Joe 2012-01-11 03:05:28

+0

這是條件運算符,它是三元運算符的一個例子。 – 2012-01-11 03:07:14

1

三元運算符是if/else語句只是一個簡寫。它有時有助於把括號內的條件表達式,以更好地看到正在測試的條件:

this.value = (typeof inc === 'number') ? inc : 1; 

因此,如果「數」,然後分配給INC THIS.VALUE的typeof INC結果以其他方式轉讓1.

+0

謝謝,澄清! – zallarak 2012-01-11 03:01:12