Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用带或不带[end]参数的slice()_Javascript_Slice - Fatal编程技术网

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

Javascript 使用带或不带[end]参数的slice(),javascript,slice,Javascript,Slice,使用slice()方法时有没有最后一个参数[end]存在性能差异 例如: var m = ['But', 'Will', 'It', 'Blend', 'Question']; var r = m.slice(1,3); 或 PS:不是结果本身,而是性能问题。如果你看一下实现,你会发现如果第二个参数没有发送,那么它使用的是数组长度,所以不,我认为它们是相同的 Array.prototype.slice = function(begin, end) { // IE < 9 gets u

使用slice()方法时有没有最后一个参数[end]存在性能差异

例如:

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


PS:不是结果本身,而是性能问题。

如果你看一下实现,你会发现如果第二个参数没有发送,那么它使用的是数组长度,所以不,我认为它们是相同的

Array.prototype.slice = function(begin, end) {
  // IE < 9 gets unhappy with an undefined end argument
  end = (typeof end !== 'undefined') ? end : this.length;
  .....................................
});
Array.prototype.slice=函数(开始,结束){
//IE<9对未定义的结束参数不满意
end=(typeof end!=“未定义”)?end:this.length;
.....................................
});

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

第二件事是,如果只指定了一个参数,则在默认值(
#length
)下计算第二个参数(切片的末端)。因此,您可以将
#slice(4)
调用看作
#slice(4,#length)
,这两个调用是相同的

Array.prototype.slice = function(begin, end) {
  // IE < 9 gets unhappy with an undefined end argument
  end = (typeof end !== 'undefined') ? end : this.length;
  .....................................
});
接下来,当解释器接受这个调用并围绕它构建一个AST时,它必须处理两个值,而不是一个。因此,这看起来可能需要两倍的时间。但与整个脚本相比,这种开销完全可以忽略不计


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

好吧,这可能会解决它。谢谢,@biancamihait这是用javascript编写polyfill的方法,而不是实际的实现。它在浏览器中的实际实现方式本机代码可能因浏览器而异,但可能不会有太大的性能差异。没有真正的差异,您可以在@adeneo中测试这一点。谢谢你这才是我真正的意思!由于O(n)复杂性仍然存在,似乎缺少最后一个参数实际上成为复杂性中可忽略的“常量计数”。非常感谢。