push
- 数组的push方法是向数组尾部添加项,会改变原数组,并返回修改之后数组的长度
Array.prototype.push = function () { // es6可通过rest参数代替arguments
for(var i = 0;i < arguments.length; i++){
this[this.length] = arguments[i];
};
return this.length;
};
复制代码
pop
- 删除该数组的最后一个元素
- 并把数组长度减1,返回删除的元素的值
- 如果数组已经为空,则pop不改变数组,返回undefined
Array.prototype.pop = function () {
var length = this.length;
if(length){
var el = this[length - 1];
this.length = length - 1;
return el;
}
}
复制代码
concat
- 数组的concat方法是将两个或多个数组合并成一个新数组并返回
- 该方法不会改变原数组
- 当传入arguments[i]不是数组时,会采用push方法追加到末尾
Array.prototype.concat = function () {
var newArr = deepClone(this);
var length = arguments.length
for(var i = 0; i < length; i++){
if(Object.prototype.toString.call(arguments[i]) !== '[object Array]'){
newArr[newArr.length] = arguments[i];
}else{
var len = arguments[i].length;
for(var j = 0; j < len; j++){
newArr[newArr.length] = arguments[i][j];
}
}
}
return newArr;
};
复制代码
深度克隆
function deepClone(obj) {
if(typeof obj !== 'object') return;
var newObj = Object.prototype.toString.call(obj) === '[object Object]' ? {} : [];
for(var key in obj){
if(obj.hasOwnProperty(key)){
newObj[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
}
};
return newObj;
}
复制代码