JS数组的copyWithin简介

142 阅读2分钟

①JavaScript中数组的copyWithin()和slice()方法作用都是复制数组,且都是浅复制;
②copyWithin()是将数组中的一部分复制并替换另外一部分,总长度是不变的,而slice()方法只复制,不替换,返回的数组长度是由复制的数组项目个数决定的;
③copyWithin()方法会改变原始的数组,而slice()方法并不会;
④slice()复制对于字符串也是有效的,但是copyWithin()方法却不支持;
⑤语法:Array.prototype.copyWithin(index, start, end),表示复制start-end的内容,并从index开始替换;
⑥index:
index参数不设置也是合法的,不过你不设置该参数数组就会原路复制返回,类似于设置为 0,这样处理只会浪费性能,没有任何实际意义。因此,index参数可以认为是必须参数;
如果index是小数,则会按照整数处理,并且是向下取整;
如果index是负数且绝对值很大,甚至比数组的长度还要大,则此时 index 当作 0 处理;否则,最终的 index 值等于 index + arr.length;
如果index的值超出了数组的长度范围,则不会有任何内容被复制。这里需要注意下,没有任何内容复制和所有内容都复制是有区别的,虽然看起来返回的都像是原数组,但其实并不是,性能这块是有着明显的差异的;
如果 index 的位置在 start 之后,则复制的内容粘贴到数组长度的尾部就停止了,也就是不会增加数组的长度的;
⑦start:
start参数是可选的,如果不设置,则当作0处理,表示数组从头复制到尾部(index小于数值长度的前提下);
start如果是小数,会向下取整处理;
start如果是负数,则从数组的后面开始取值,等同于 start + arr.length;
start如果是负数,同时绝对值小于 -1 * arr.length,则当作 0 处理;
start如果超出数组的长度范围,则不会发生复制;
⑧end:
end参数是可选的,如果不设置,则当作array.length处理,表示数组复制到尾部;
end如果是小数,会向下取整处理;
end如果是负数,则从数组的后面开始取值,等同于 end + arr.length;
end如果是负数,同时绝对值小于 -1 * arr.length,则当作 0 处理;
end如果超出数组的长度范围,则当作array.length处理;
如果end对应的位置比start小,则不会发生复制;
(参考:www.zhangxinxu.com/wordpress/2…