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

Aje*_*i32 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)
Run Code Online (Sandbox Code Playgroud)

输出:

Argument 1: 1
Other arguments: [2, 3]
Run Code Online (Sandbox Code Playgroud)

JavaScript中的相同之处是什么?

Aje*_*i32 16

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

当在函数调用和数组声明中使用时,这种三点语法称为扩展运算符.在函数定义中使用时,它被称为rest参数.

例:

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
Run Code Online (Sandbox Code Playgroud)

输出:

Argument 1:  1
Other arguments:  [2, 3]
Run Code Online (Sandbox Code Playgroud)

扩展运算符和rest参数可在所有主流浏览器的最新版本(Internet Explorer除外)和最新的Node.js LTS版本中使用.

完全兼容性表:Spread运算符,Rest参数


cur*_*nii 5

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

第二个可以通过使用.apply()您的函数的方法来完成.