【问题标题】:What's the JavaScript equivalent of Ruby's splat operator?Ruby 的 splat 运算符的 JavaScript 等价物是什么?
【发布时间】:2013-12-29 04:46:09
【问题描述】:

在 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 中 this 的等价物是什么?

【问题讨论】:

标签: javascript ruby ecmascript-5 ecmascript-harmony


【解决方案1】:

在旧版本的 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 operatorRest parameters

【讨论】:

【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多