Javascript构造在连接字符串中

时间:2016-05-06 15:24:24

标签: javascript string

下面会显示一段简单的javascript:

var mystring = ("random","ignored","text","h") + ("ello world")

此字符串会产生hello world。我有两个问题:

  • ("随机","忽略","文字"," h")构造被调用(它不是 一个数组,因为数组有不同类型的括号?)
  • 有人能从技术上解释为什么这个字符串会导致你好世界吗? (也就是为什么只考虑构造中的" h"字符?)

1 个答案:

答案 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), {})

我不一定建议你经常使用它,因为它可能会令人困惑,并且通常会采用更清晰(如果更详细)的方式来做同样的事情。