javascript : splice 的妙用

Posted 亦虚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript : splice 的妙用相关的知识,希望对你有一定的参考价值。

今天看前同事的代码,有个写法很有意思: splice(0)。

有意思的是,这并不是一个“合法”的写法。

 

w3school是这样写的:

arrayObject.splice(index,howmany,item1,.....,itemX)
参数描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。

index和howmany都是必须的,但似乎只写index也可以...

那么,到底 splice(0) 会怎么样呢?

 

stackoverflow 上有个问题很有意思。

有个人说,我想把数组A的东西拷贝到数组B,结果数组A怎么就没了?

var ArrayA = [];
var ArrayB = [];

ArrayA.push(1);
ArrayA.push(2);

ArrayB = ArrayA.splice(0);

alert(ArrayA.length);

没错 splice() 会修改原数组,而 splice(0) 会把原数组清空。

var a = [1,2,3,4,5]
   ,b = a.splice(0);
//=> a = [], b = [1,2,3,4,5]

那怎么解答这个人的问题?

很简单,用 slice() 就可以了。slice() 不会改变原数组。

var a = [1,2,3,4,5]
   ,b = a.slice();
//=> a = [1,2,3,4,5], b = [1,2,3,4,5]

 

以上是关于javascript : splice 的妙用的主要内容,如果未能解决你的问题,请参考以下文章

关于 JavaScript 的 slice 和 splice 方法的一个问题

关于Javascript splice方法的一个坑。

&&和||的操作符妙用(javascript)

setTimeout的妙用2——防止循环超时

(转)深入浅出 妙用Javascript中applycallbind

深入浅出妙用 Javascript 中 applycallbind