使用条件运算符声明数组元素的Javascript意外行为?

Mah*_*rni 1 javascript arrays syntax

我是javascript的新手,我看到了这个我无法理解的问题,

这是Chrome的代码和检查器输出,

> test?'test':'ok'
"ok"
> [test?'test':'ok']
["ok"]
> ['ok' + test?'test':'ok']
["test"]
Run Code Online (Sandbox Code Playgroud)

这个阵列发生了什么事?我想要的是创建一个数组['浏览器'+ isIE?'IE':'未知''.

我能用[isIE?'browser:IE':'browser:UNKNOWN']有效.但我不明白上面的语法有什么问题?

Hal*_*yon 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') 是预期的功能.