Array.slice 与 Array().slice 的区别

在 JavaScript 中,Array.slice() 和 Array().slice() 都是用来获取数组的子集。然而,它们有些微妙的差别,在使用时需要注意。

Array.slice()

Array.slice() 是 Array.prototype 上的一个方法,用于返回一个新的数组,该数组包含原始数组中从开始索引(包括)到结束索引(不包括)之间的元素。如果省略第二个参数,则默认为数组长度。

----- --- - --- -- -- -- ---
----- --------- - ------------ ---

----------------------- -- --- -- --

Array().slice()

另一方面,Array() 是 JavaScript 中内置的构造函数之一。当以这种方式调用它时,它会创建一个新的空数组对象。然后,我们可以使用 slice() 方法从该对象上获取一个子集。

----- --- - --- -- -- -- ---
----- --------- - ----------------------- -- ---

----------------------- -- --- -- --

在这个例子中,我们使用了 Function.prototype.call() 方法来调用 slice() 方法,并在第一个参数中传入目标数组。这允许我们绕过了 Array.prototype 上的直接调用,并通过一个空的数组对象来调用 slice()。

区别与建议

虽然这两种方式都可以获取数组的子集,但是它们在一些方面有所不同。最明显的区别可能在于,当原始数组不是一个真正的数组时,Array.slice() 方法将会失败(比如 DOM 集合或 arguments 对象)。而使用 Array().slice() 可以避免这个问题。

此外,由于 Array.slice() 是直接在数组对象上调用的,因此效率可能会更高一些。然而,在大多数情况下,这种性能差异是微不足道的。

当然,对于大多数开发者而言,Array.slice() 也更加简洁和易于理解。因此,我们建议尽量使用 Array.slice() 来获取数组的子集,除非在特殊情况下需要使用 Array().slice()。

-- ---- -------------
----- --- - --- -- -- -- ---
----- --------- - ------------ ---

----------------------- -- --- -- --
-- ----------- ---------------
----- --- - --- -- -- -- ---
----- --------- - ----------------------- -- ---

----------------------- -- --- -- --

总之,在掌握了这两种方式之后,我们可以更加灵活地操作数组,并且能够更好地处理各种情况。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/30668