我对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')
我不确定您是否将表达式括在方括号中以表示数组,但我将它们留在这里;-)