2011-08-15 208 views
2

可能重複:
Question mark in JavaScript這個語法是什麼意思?

我已經看到了這個繞了幾圈,但是我從來不知道是什麼意思。它的名字是什麼,它是如何工作的?

這是我看到的例子:

input.checked = input.type == "radio" ? true : false; 
+1

你肯定應該有2這裏等號:'input.checked == input.type'? – shanethehat

+1

我希望你沒有看到這種冗餘且沒有教訓的代碼... – hugomg

+0

這是*精確*代碼嗎?它看起來有點懷疑...你有一個URL嗎? – FrustratedWithFormsDesigner

回答

6

這個例子中有一個額外的=,我想你的意思是:

input.checked = input.type == "radio" ? true : false; 

(它現在固定)

它指定trueinput.checked如果input.type == "radio",或false如果它沒有。

expression ? trueResult : falseResult 

...稱爲條件運算(或有時,「三元」運算符  —技術上,它只是一個三元操作,例如,操作員需要三個操作數)。更多Section 11.12的規格。

在這種情況下,有一個在使用條件操作絕對沒有點,因爲等價表達式的結果是truefalse無論如何,所以它可能只是寫:

input.checked = input.type == "radio"; 

...但有很多地方的條件運算符是有用的。例如,假設你想分配12x取決於是否y爲42:

x = y == 42 ? 1 : 2; 

你可以認爲?作爲要求一個是或否的問題,什麼遵循它作爲「是「回答,並且:是」否「答案。

+0

「三元」操作符是否需要falseResult值?如果我想要,我可以將它保留嗎? – 0x499602D2

+0

@David:條件表達式('''之前的表達式)的值將被強制爲一個布爾值,如果它不是基於常規JavaScript規則的布爾值(就像在'if'中使用的表達式一樣聲明)。我不確定你的意思是「你能否離開它」。如果你在你的問題中指定'true'或'false',那麼正如我所說的那樣,不需要條件操作符 - 只需將結果直接分配給'checked'。但是,如果您想分配「true」或「false」以外的其他值,那麼在某些情況下,條件運算符是一種方便的方法。 –

+0

@David:哦,對不起,我明白你的意思了。是的,當使用條件運算符時,虛假部分是必需的。你必須在':'和表達式結尾之間有一些東西。否則,使用'if'或者JavaScript(奇怪的強大的''''和'&&'運算符](http://blog.niftysnippets.org/2008/02/javascripts-curiously-powerful-or.html)。 –

3

也許是更容易理解是這樣的:

input.checked = (input.type == "radio")? true : false; 

這基本上是一個如果其他。如果表達式爲真,則input.checked將被設置爲第一個值,否則爲第二個值。

[編輯]

作爲一個說明,在JavaScript中,你應該評估字符串時檢查類型的平等,以及總使用「===」來代替「==」。

+0

不完全 - 請注意input.checked的double ==。這不是一項任務,而是一個比較。 –

+0

啊,錯過了,我編輯了我的答案。感謝您指出。 – Snps

+0

@Jon,我很確定OP有一個錯字。 –

0

這是一個三元表達式。它是簡寫:

if (input.type == "radio") { 
    input.checked = true; 
} else { 
    input.checked = false; 
} 

但是,在這個特定的例子中有冗餘。它可能是簡單地寫爲:

input.checked = input.type == "radio"; 
+0

三元運算符是否需要一個錯誤的結果值?如果我想要,我可以把它放棄嗎? – 0x499602D2

+0

@大衛是的(對你的第一個問題)。沒有(到你的第二個)。 –

0

也許第一===

它看起來像ternary operator.(短否則,如果結構)

+0

三元運算符是否需要一個錯誤的結果值?如果我想要,我可以把它放棄嗎? – 0x499602D2

+0

在JavaScript中是必需的。你不能做類似'a =(x == 3)的東西? 5;'但你可以這樣做:'a =(x == 3)? 5:a'。這意味着在一個錯誤的結果案例中,「a」將等於「a」 –