我对javascript很新,我看到了这个我无法理解的问题,
以下是Chrome的代码和检查器输出,
> test?'test':'ok'
"ok"
> [test?'test':'ok']
["ok"]
> ['ok' + test?'test':'ok']
["test"]
这个阵列发生了什么?我想要的只是创建一个数组 ['浏览器'+ isIE? 'IE':'未知''。
我可以用[isIE? 'browser:IE':'browser: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')
是预期的功能。
答案 1 :(得分:2)
这是表达式的评估方式:
('ok' + test) ? 'test' : 'ok';
评估'ok'
和test
的串联,如果真的则返回'test'
,否则返回'ok'
。
你想要的是:
'ok' + (test ? 'test' : 'ok');
将'ok'
连接到三元表达式的结果,如果'test'
是真实的,则test
,否则'ok'
<强>更新强>
具体例子。这将返回你想要的东西。
'browser: ' + (isIE? 'IE' : 'UNKNOWN')
我不确定你是否用方括号包装表达式来表示数组,但是我把它们留在了这里; - )