Array的index可以不是正整数,但是它们不会包含在Array中
let myArr = [1, 2, 3];
myArr[2.3] = 3;
myArr[-2] = 4;
myArr['a'] = 5;
console.log(myArr[2.3]);
console.log(myArr[-2]);
console.log(myArr['a']);
console.dir(myArr);
console.log(myArr.length);
运行结果,可以看出通过下标依然可以访问,但是Array的长度依然为3,没有变长
Array.prototype.push()与Array.prototype.unshift() 可以对Array进行多值添加,返回值为当前Array长度
let myArr = [];
console.log(myArr.push(1, 2, 3));
console.log(myArr);
console.log(myArr.unshift(4, 5, 6));
console.log(myArr);
运行结果
Array.prototype.slice()
let myArr = [1, 2, 3, 4, 5, 6];
console.log(myArr.slice());
console.log(myArr);
console.log(myArr.slice(2));
console.log(myArr.slice(2,4));
console.log(myArr.slice(-2));
console.log(myArr.slice(-2, -1));
从运行结果可以看出:
- 此方法可以返回一个被切割的数组,但并不会改变原数组
- 第一个参数的切割开始的下标,第二个参数如果没有,直接切割到末尾,如果存在,则代表被切割部分最后一位的后一个下标
- 如果为负数,则表达的是从后往前的下标,从 -1 开始
使用 Array.prototype.splice() 来切割,修改数组
参数分析
Array.prototype.splice(start, deleteCount, item1, item2, ...)
删除数组的一个元素(与 delete方法比较)
let myArr = [1, 2, 3, 4, 5, 6];
// 目标:删除myArr[3]
console.log(myArr.splice(3,1));
console.log(myArr);
myArr = [1, 2, 3, 4, 5, 6];
delete myArr[3];
console.log(myArr[3]);
console.log(myArr);
从运行结果可以看出,使用 Array.prototype.splice() 可以改变原数组,并放回切割部分形成的新数组
如果将切割长度定位,也就是第二个参数设为1的话,就可以删除指定下标的数值,而如果使用 delete
方法删除某个下标对应的值的话,那个下标对应的值变为 undefined
,但数组整体长度不会改变,这样破坏数组结构,不建议使用
删除一部分值的同时在当前位置添加新的值
let myArr = [1, 2, 3, 4, 5, 6];
//目标:从myArr[3]开始,删除两个数,并向其位置添加新的值
console.log(myArr.splice(3, 2, 'a','b','c','d'));
console.log(myArr);
运行结果