什么是相当于Ruby的splat运算符的JavaScript?

时间:2013-12-29 04:46:10

标签: javascript ruby ecmascript-5 ecmascript-harmony

在Ruby中,您可以使用splat(*)运算符捕获函数的可变数量的参数,或者将数组的内容作为参数发送到函数,如下所示:

def example(arg1, *more_args)
  puts "Argument 1: #{arg1.inspect}"
  puts "Other arguments: #{more_args.inspect}"
end

test_args = [1, 2, 3]

example(*test_args)

输出:

Argument 1: 1
Other arguments: [2, 3]

JavaScript中的等价物是什么?

2 个答案:

答案 0 :(得分:14)

在旧版本的JavaScript(ECMAScript 5)中,并不存在与此完全等效的内容。在支持ECMAscript 6的现代浏览器中,有一些非常相似的东西用三个句点表示(...)。

当在函数调用和数组声明中使用时,这种三点语法称为spread operator。在函数定义中使用时,它被称为rest parameters

示例:

function example(arg1, ...more_args) { // Rest parameters
  console.log("Argument 1: ", arg1)
  console.log("Other arguments: ", more_args)
}

test_args = [1, 2, 3]

example(...test_args) // Spread operator

输出:

Argument 1:  1
Other arguments:  [2, 3]

所有主要浏览器的最新版本(Internet Explorer除外)和最新的Node.js LTS版本都提供了spread运算符和rest参数。

完整兼容性表:Spread operatorRest parameters

答案 1 :(得分:5)

第一次使用可以使用Array.slice(arguments)完成(杂乱)。

第二种方法可以使用函数的.apply()方法完成。