下面会显示一段简单的javascript:
var mystring = ("random","ignored","text","h") + ("ello world")
此字符串会产生hello world。我有两个问题:
答案 0 :(得分:9)
你正在遇到鲜为人知的comma operator!
括号和逗号运算符创建一组按顺序计算的表达式,然后返回最后一个。因此('foo', 'bar')
将评估为'bar'
。但是,由于每个表达式都经过评估,(foo(), bar())
会在返回foo()
返回的值之前调用 bar()
和bar()
。
一步一步,您的代码运行如下:
var mystring = ("random","ignored","text","h") + ("ello world")
var mystring = "h" + ("ello world")
var mystring = "h" + "ello world"
var mystring = "hello world"
许多(甚至大多数)语言都有此运算符,但它很少使用。使用ES6 lambdas作为reduce
的正文时会很有帮助,就像您将数组转换为对象一样:
[{key: 'a', value: 1}, {key: 'b', value: 2}].reduce((p, c) => (p[c.key] = c.value, p), {})
我不一定建议你经常使用它,因为它可能会令人困惑,并且通常会采用更清晰(如果更详细)的方式来做同样的事情。