Underscore 源码学习(三)
这次主要说剩余参数。
在 ES5 中,如果想要函数接收任意数量的参数,必须使用特殊变量 arguments,举个例子,我们要实现一个加法函数,要求第一个数乘2,然后与其他数相加。
在 ES6 中,我们可以使用 ... 操作符,例如:
使用 ES5 我们无法给函数定义参数,而只能通过 arguments 来获取参数,这样写明显带来了可读性的降低。而 ES6 我们就可以在函数声明里面写明参数,对于不定长的参数,则可以使用 ... 操作符。... 还有另一个常用的应用场景,比如下面例子:
如果细看输出的[1, 2, 3]会发现他是这样的:/result1.png)
我们再试试下面的
再看下[1, 2, 3]这行输出里面是什么:/result2.png)
从 instanceof 我们就知道了 arguments 并不是真正的数组。伪数组实质是一个对象。
要把一个伪数组转为数组,可以这样用
上面这种做法在很多地方都可以看到。除了上面这样做之外,我们还可以使用 ES6 的 Array.from 来处理,如下:
但在 ES6 中,我们使用 ... 运算符并不存在这个问题,比如上面第二个例子,args 是一个数组。
鉴于此,我们应该尽量使用 ES6 剩余参数写法和 Array.from 的写法,因为这样更容易理解,而且写起来更简洁。
另外,我们还可以使用 ... 操作符来复制数组,如下:
