Javascript 使用带或不带[end]参数的slice()
使用slice()方法时有没有最后一个参数[end]存在性能差异 例如: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
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)复杂性仍然存在,似乎缺少最后一个参数实际上成为复杂性中可忽略的“常量计数”。非常感谢。