2012-12-18 17 views
1

我是相當新的JavaScript,我看到這個問題,我不能作出任何意義,使用條件運算符聲明數組的元素的行爲意外?

下面是從Chrome中輸出的代碼和檢查,

> test?'test':'ok' 
"ok" 
> [test?'test':'ok'] 
["ok"] 
> ['ok' + test?'test':'ok'] 
["test"] 

這是怎麼回事與此陣列?我要的只是創建一個數組 ['browser'+ isIE? 'IE':'UNKNOWN']。

我可以用[isIE嗎? '瀏覽器:IE':'browser:UNKNOWN']哪個工作。但我不明白上面的語法有什麼問題?

+0

語法錯誤。請確認。 – closure

+0

'['browser'+ isIE? 'IE'+'UNKNOWN']'看起來不正確。應該是'['browser'+ isIE? 'IE':'UNKNOWN']'(注意冒號':') – rae1

+0

那麼,'test'的價值是什麼? –

回答

2

這是表達是如何計算:

('ok' + test) ? 'test' : 'ok'; 

評估的'ok'test串聯,返回'test'如果truthy,'ok'否則。

你想要的是:

'ok' + (test ? 'test' : 'ok'); 

串聯'ok'與三元的表達,這是'test'如果test是truthy的結果,'ok'否則

更新

混凝土例。這將返回你想要的。

'browser: ' + (isIE? 'IE' : 'UNKNOWN') 

我不知道你是否放在方括號中表示數組或不表達,但我已經離開他們在這裏下車;-)

+0

太棒了!這是表達的問題。謝謝傑克你的搖滾。 –

5

可以重寫[isIE? 'browser: IE' : 'browser: UNKNOWN']到:

["browser: " + (isIE ? 'IE' : 'UNKNOWN') ]

我會推薦給總是使用括號與條件運算符。

一個常見的錯誤是:bool ? "a" : "b" + "c"將給"a""bc",但不是預期的"ac"

(bool ? "a" : "b") + "c"是預期的功能。

另一個缺陷:

'ok' + test?'test':'ok'"test""ok"但從來沒有"oktest""okok"。這是因爲'ok' + test被視爲布爾值(我認爲這總是正確的)。

'ok' + (test ? 'test' : 'ok')是預期的功能。

+0

你可以用括號來解決這個問題,如: '(bool?「a」:「b」)+「c」 這樣你就可以得到'ac'或'bc'。 – marekful

+0

謝謝你工作的玻璃料。 –