1

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

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

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

这个数组是怎么回事?我想要的只是创建一个数组 ['browser' + isIE? 'IE':'未知']。

我可以用 [isIE? 'browser: IE' : 'browser: UNKNOWN'] 有效。但我不明白上述语法有什么问题?

4

2 回答 2

5

您可以重写[isIE? 'browser: IE' : 'browser: UNKNOWN']为:

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

我建议始终在条件运算符中使用方括号。

一个常见的陷阱是:bool ? "a" : "b" + "c"将给出"a"or "bc",但不是预期的"ac"

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

另一个陷阱:

'ok' + test?'test':'ok'给出"test"or"ok"但从不给出"oktest"or "okok"。这是因为'ok' + test被视为布尔值(我认为这总是正确的?)。

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

于 2012-12-18T17:06:39.033 回答
2

这是表达式的评估方式:

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

评估 and 的连接'ok',如果为真则test返回'test''ok'否则返回。

你想要的是:

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

与三元表达式的结果连接'ok',即'test'iftest为真,'ok'否则

更新

具体例子。这将返回你想要的。

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

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

于 2012-12-18T17:09:47.043 回答