使用带或不带 [end] 参数的 slice()

Using slice() with or without [end] argument

使用带或不带最后一个参数的 slice() 方法是否有任何性能差异[end]?

示例:

var m = ['But', 'Will', 'It', 'Blend', 'Question'];
var r = m.slice(1,3);

var r = m.slice(2);

PS: 不是结果,只是性能问题。

如果你看一下实现 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice 你会发现,如果没有发送第二个参数,那么它会使用数组长度,所以不,我认为它们是相同的。

Array.prototype.slice = function(begin, end) {
  // IE < 9 gets unhappy with an undefined end argument
  end = (typeof end !== 'undefined') ? end : this.length;
  .....................................
});

此函数在两种情况下都具有线性复杂度 (O(n)),无论是仅指定一个参数还是指定两个参数。这是首先要考虑的。

第二件事是,如果只指定了一个参数,则第二个参数(切片的末尾)将按默认值 (#length) 在后台计算。所以你可能会认为 #slice(4) 调用为 #slice(4, #length),这两个将是相同的。

接下来,当解释器接受这个调用并围绕它构建一个 AST 时,它必须处理两个值,而不是一个。所以它可能看起来像两倍的时间消耗。但是相对于整个脚本来说,这个开销是完全可以忽略不计的。

因此,两者在时间上没有显着差异。纯粹是代码可读性的问题。