我見過這種格式用於JavaScript的代碼,但找不到一個好的意思來源。你如何閱讀這段JavaScript代碼? (var1?var2:var3)
編輯爲後續行動:
感謝您的所有快速答案!我覺得是這樣的。現在,獎勵積分:
可以使用 (VAR1 VAR2?)
做同樣的事情
if (var1) {
var2
}
?
我見過這種格式用於JavaScript的代碼,但找不到一個好的意思來源。你如何閱讀這段JavaScript代碼? (var1?var2:var3)
編輯爲後續行動:
感謝您的所有快速答案!我覺得是這樣的。現在,獎勵積分:
可以使用 (VAR1 VAR2?)
做同樣的事情
if (var1) {
var2
}
?
它被稱爲ternary(因爲它有三個操作數)條件(因爲它是一個的if/else /再)操作。
據計算爲一個值,所以通常會使用它分配一個值,如:
var result = condition ? value1 : value2;
即相當於:
var result;
if (condition == true) {
result = value1;
} else {
result = value2;
}
一個例子:
var message = "Length is " + len + " " + (len==1 ? "foot" : "feet");
注意?:
是完整的運營商。它不是?
和:
運算符,因此?
本身在Javascript中沒有意義。
我認爲你的第一個==是一個錯字。 – eyelidlessness 2009-09-29 06:31:07
此外,代碼的兩位不等效,因爲第二位應該在「var result」之前。 – eyelidlessness 2009-09-29 06:51:07
@eyelidlessness - 顯然我不應該在7.30AM之前編碼。我昨天對SO做了同樣的== vs =錯誤。感謝您指出這些。 – 2009-09-29 07:10:14
它是一個條件運算符。
這是
如果VAR1然後VAR2其他VAR3
在這裏閱讀更多
條件運算符是唯一 JavaScript的運算符需要三個 操作數。該運算符通常是 ,用作if語句的快捷鍵。
我可以知道投票的原因嗎? – rahul 2009-09-29 06:36:34
-1。這確實是在採取錯誤的方針。你不希望值表達式修改任何東西,你只是希望整個表達式的值可以是真正的一側的值,也可以是假的一側的值,這就是這個操作符的目的。 – AnthonyWJones 2009-09-29 06:36:55
@phoenix也許你的例子並沒有完全顯示條件運算符的有用用法。它可以簡化爲'var xCon = num == 1;' – CMS 2009-09-29 06:49:09
if(var1) {
var2;
else {
var3;
}
這似乎是一種三元操作。可以這麼說,其他操作的簡寫形式。檢查here瞭解詳細信息...
表達var1 ? var2 : var3
如果var1
被認爲具有等價於true
其他的值返回的var3
德值返回var2
值。
注意這不是完全一樣: -
if (var1)
varX = var2
else
varX = var3
由於上述構建體不能將其自身表現爲較大的表達式的一部分。
在表達式中,因爲已知? :
,應避免允許組件表達式具有除++或 - 運算符的副作用以外的副作用。例如,這是不是一個好主意: -
varX = var1 ? doSomethingSignificant() : doSomethingElseSignificant();
在這種情況下,它會更好地使用if else
結構。一方面: -
varX = var1 ? calcSomething(var2) : someOtherCalc(var2);
這是可以接受的,假設被調用函數本身並不顯着修改程序狀態。
編輯:
我想我需要重新加強了這一點。做不是使用三元運算符作爲簡化語句的方法來簡化if
。兩者有不同的目的。如果您的代碼充滿? :
應該是if else
這將很難閱讀。我們預計邏輯流程將出現在if
語句中。當存在表達式的簡單邏輯組件時,我們期望? :
。注表達式不要修改的東西只有他們的結果,當分配應該修改的東西。
我認爲一種簡單的方式來說明最後一部分是:三元運算符的工作是根據條件**等於一個值或另一個**,而如果Javascript中的語句根本不產生任何值 - 他們的工作是**執行代碼**。 – Chuck 2009-09-29 07:34:47
@Chuck:這很簡單,但是沒有理由說明爲什麼表達式不應該在三元運算符中執行代碼__,它的代碼的功能(或者更重要的一點)非常重要。理想情況下,程序狀態不應因表達式被評估而改變。 – AnthonyWJones 2009-09-29 08:09:13
至於第一個問題的增編,您也可以使用
var result = (condition) && var1 || var2;
,並獲得相同的結果
對於第二個問題,在C以下的工作太:
(condition) && someinstruction;
,但似乎並沒有在JavaScript(至少與我的版本的Firefox)工作。
是的,它應該工作。 '(condition)&& someinstruction;'只有'condition'具有真值時才應該評估'someinstruction'。 – kangax 2009-09-29 12:38:51
不,你不能。你還必須指定else條件。 – rahul 2009-09-29 06:32:06
關於你的編輯,你會得到最接近的是:'if(var1)stmt;'在一行上。 – 2009-09-29 07:12:44
var1? var2():void(0); – 2009-09-29 07:33:48