2013-06-30 30 views
2

我甚至不知道從哪裏開始搜索這個問題的答案,我以前沒有看到過這樣的語法!速記Javascript變量語法

function (_d) { 
    this.xiSWFPath = !_d ? "expressinstall.swf" : _d; 
    this.setAttribute("useExpressInstall", true); 
} 

這是否等同於

this.xiSWFPath = if not (_d) [declared true, else false] then expressinstall.swf else _d 

我明白這是一個初學者的問題! 我可以在哪裏學習更多關於這種語法的知識?

+0

這是速記符號。它存在於大多數基於c的語法語言中 – TGH

+1

它被稱爲三元表達式。這是一個速記if/else。 '(x)?(y):(z);'相當於'if(x){(y); } else {(z); }' – joequincy

+0

也被稱爲「if-then-else」語句,(if)?那麼:else – skyline3000

回答

2

這是? :運營商,它可以追溯至70年代的傳統。

test-expression表達式表達式2

如果測試表達式求的東西truthy,則表達式求值,這就是整個事情的價值。否則,它是表達式2。

運算符綁定相當鬆散,並且從左到右(小心,PHP程序員!)。它總是安全的,並且(通常)更易於使用圓括號。

請注意,這是表達式語法的一部分。該結構可以作爲任何表達式的一部分出現在任何地方。在您的示例中,它是分配操作右側的表達式(作爲var語句的一部分)。

+1

+1。但是,在這種情況下,它可能更好地寫爲'this.xiSWFPath = _d || 「expressinstall.swf」'。 – ruakh

+0

@ruakh是的,的確如此!也許OP會運行併發布另一個問題:-) – Pointy

0

線有問題this.xiSWFPath = !_d ? "expressinstall.swf" : _d;是等於:

if (! _d) { 
    this.xiSWFPath = "expressinstall.swf"; 
} else { 
    this.xiSWFPath = _d; 
} 

此鏈接有這個簡寫爲許多語言的詳細信息:http://en.wikipedia.org/wiki/%3F

希望有所幫助。

0

你們看到的是ConditionalTernary Operator(嘗試搜索這個詞,你會發現很多。)

這擴展到

if(!_d) 
    this.xiSWFPath = "expressioninstall.swf"; 
else 
    this.xiSWFPath = _d; 

的,如果(!_ d)是一個比較檢查它是否被聲明,它是在說如果_d是falsy,或者評估爲false,那麼在javascript中相當多的錯誤會導致錯誤。

if(_d in [undefined, null, 0, false, '', NaN]) //psydo-code does not work. 

更非正式地說,如果_d沒有很好的價值,使用rexpressioninstall.swf else use _d。