使用条件运算符声明数组元素的 Javascript 行为异常



我对javascript相当陌生,我看到了这个问题,我无法理解,

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

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

这个阵列是怎么回事?我想要的只是创建一个数组["浏览器"+是IE?"IE":"未知"]。

我可以用[是IE?"浏览器:IE":"浏览器:未知"]有效。但我不明白上面的语法有什么问题?

您可以将[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')是预期的功能。

表达式

的计算方式如下:

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

评估'ok'test的串联,如果为真,则返回'test',否则'ok'返回。

你想要的是:

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

'ok'与三元表达式的结果连接起来,如果test为真,则'test',否则'ok'

更新

具体的例子。这将返回您想要的内容。

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

我不确定您是否将表达式括在方括号中以表示数组,但我将它们留在这里;-)

最新更新