Javascript构造在连接字符串中

use*_*622 4 javascript string

下面显示了一个简单的javascript:

var mystring = ("random","ignored","text","h") + ("ello world")
Run Code Online (Sandbox Code Playgroud)

这个字符串会产生hello world.我有两个问题:

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

ssu*_*ube 9

你正在遇到这个鲜为人知的逗号操作员!

括号和逗号运算符创建一组按顺序计算的表达式,然后返回最后一个.所以('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"
Run Code Online (Sandbox Code Playgroud)

许多(甚至大多数)语言都有此运算符,但它很少使用.使用ES6 lambdas作为a的主体时会很有帮助reduce,就像将数组转换为对象一样:

[{key: 'a', value: 1}, {key: 'b', value: 2}].reduce((p, c) => (p[c.key] = c.value, p), {})
Run Code Online (Sandbox Code Playgroud)

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