下面程序在控制台输出的结果是什么?
答案是D.40,50
详解:面对这样一个简单但容易混淆的面试试题,许多朋友会选择A.10,20,30,60,70,80;
认为splice将从第3个元素开始的2个元素替换成60,70;但是往往忽略了splice返回的是被删除的元素组成的临时数组,也就是说arr1获得的是被删除的值40,50;即arr1=[40,50];
也有许多朋友注意到了这一点,但是却选了C.40,50,80;那么就是忽略了concat不修改原数组,总是返回一个新数组。所以选D.40,50。
Splice用法详解:
Splice具有删除、插入、替换三种功能
注:splice直接修改原数组对象
1. 删除: arr.splice(starti,n) var deletes=arr.splice(starti.n)
n表示个数。
从starti位置开始,直接删除数组n个元素。
删除arr中starti位置开始后的n个元素。
强调:返回被删除的元素组成的临时数组
但是会返回删除的元素组成的新数组,若是删掉的元素不要,不用赋值。
插入: arr.splice(starti,0,新值1,新值2,……)
在arr中starti位置插入新元素
在starti位置插入新值1,新值2,……
原starti位置及其之后的元素,被向后顺移
强调:不支持打散参数中的数组替换: arr.splice(starti,n,新值1,新值2,……)
总是先删除arr中starti位置开始的n个元素,再在starti位置插入新元素。
删除的元素个数和插入的新元素个数不必相等
新元素的个数和n不一定相等,数组会自动调整元素的位置和长度
对二维数组来说,splice不会自动打散参数中的数组。
concat拼接数组:var newArr=arr1.concat(arr2,值1,值2,……),此例中arr1不发生改变。会自动打散参数中的数组,以单个元素形式拼接到新数组中。而且打散的方式平级加上去。
强调:concat不修改原数组,总是返回一个新数组