【问题标题】:Javascript declaring elements of array with conditional operator behaves unexpectedly?使用条件运算符声明数组元素的 Javascript 行为异常?
【发布时间】:2012-12-18 17:04:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 语法错误。请验证。
  • ['browser' + isIE? 'IE' + 'UNKNOWN'] 看起来不对。应该是['browser' + isIE ? 'IE' : 'UNKNOWN'](注意冒号:
  • 那么,test 的值是多少?
  • 感谢 rae1n。我的错误用问题修复了语法错误。

标签: javascript arrays syntax


【解决方案1】:

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

【讨论】:

  • 你可以通过括号来解决这个问题:(bool ? "a" : "b") + "c" 这样你会得到'ac'或'bc'。
【解决方案2】:

这是表达式的计算方式:

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

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

你想要的是:

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

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

更新

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

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

我不确定您是否将表达式括在方括号中以表示数组,但我在此处省略了它们 ;-)

【讨论】:

  • 太棒了!这是表达的问题。谢谢杰克你摇滚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2021-04-28
  • 2016-08-30
  • 2019-02-09
相关资源
最近更新 更多