一、数组常用方法二「这些方法会改变原有数组」
1.1、concat数组拼接
// 数组常用方法二:这些方法都会改变原来的数组// concat: 数组拼接var arr1 = [1, 2, 3, 4];var arr2 = ['a', 'b', 'c', 'd'];var res = null;res = arr1.concat(arr2);console.log(res);res = arr2.concat(arr1);console.log(res);
1.2、toString把数组转换为字符串
// toString:把数组转换为字符串var arr1 = [1, 2, 3, 4, 5];console.log(arr1.toString());var arr2 = ['a', 'b', 'c', 'd'];console.log(arr2.toString());
1.3、slice实现数组截取
- 不传参数
- 传一个参数
- 传递两个参数
传递负数参数
// slice:实现数组截取var arr = [1, 2, 3, 4, 5, 6];var res = null;// 不传递参数,可以实现数组克隆res = arr.slice();console.log(res);// 传递一个参数, 从该索引处截取到末尾「注意会包括该索引」res = arr.slice(2);console.log(res);// 传递两个参数,从索引1开始「包含」,截取到索引4之前res = arr.slice(1, 4);console.log(res);// 传递负数索引,从索引-4开始(包含),截取到索引-1之前res = arr.slice(-4, -1);console.log(res);
1.4、join按照指定分隔符把数组拆分成字符串
// join按照指定分隔符把数组拆分成字符串var arr = [1, 2, 3, 4, 5];var res = null;res = arr.join('-');console.log(res);res = arr.join('^');console.log(res);
1.5、split把一个字符串变成数组「字符串方法」
分隔符必须和字符串一样 ```javascript
// split:把一个字符串变成数组,分隔符必须和字符串的一致var arr = [1, 2, 3, 4];var res = null;res = arr.join('+');console.log(res);console.log(res.split('+'));
// 可以实现数组截取
console.log(res.split('+', 3));
<a name="vUMOd"></a># 二、类数组<a name="De95K"></a>## 2.1、类数组基础知识- 类数组没有继承Array.prototype上的方法,所以不能直接使用数组原型上的方法- 元素集合HTMLCollction也是类数组- 类数组的原型是Object```javascriptfunction func(){console.log(arguments);}func(1, 2, 3, 4);
2.2、元素集合也是类数组
<div></div><div></div><div></div>var oDiv = document.getElementsByTagName('div');console.log(oDiv);
2.3、类数组借用数组原型上的方法
// 类数组借用数组原型上的方法var obj = {'2': 3,'3': 4,'length': 2,'splice': Array.prototype.slice,'push': Array.prototype.push}obj.push(1);obj.push(2);console.log(obj);
将方法写到对象原型上
var obj = {'2': 3,'3': 4,'length': 2,}Object.prototype.splice = Array.prototype.splice;Object.prototype.push = Array.prototype.push;obj.push(1);obj.push(2);console.log(obj);
2.4、类数组继承数组push方法后如何实现push方法的
// 注意这里有面试题:类数组继承数组push方法后,是如何实现push方法的var obj = {'2': 3,'3': 4,'length': 2,}Object.prototype.splice = Array.prototype.splice;Object.prototype.push = Array.prototype.push;// 类数组继承数组push方法后,是如何实现push方法的Array.prototype.push = function(elem){obj[obj.length] = elem;obj.length++;}obj.push(5);obj.push(100);console.log(obj);
三、一道关于类数组的阿里面试题
// 一道关于类数组的阿里面试题var obj = {'2': 3,'3': 4,'length': 2,'splice': Array.prototype.splice,'push': Array.prototype.push}obj.push(1);obj.push(2);console.log(obj);console.log(obj.length);// 类数组继承数组原型push方法后,是如何实现push方法的Array.prototype.push = function(elem){this[this.length] = elem;this.length++;}
四、对象有length属性且属性名是数组的才算类数组
// 对象有length属性且属性名是数组的才算类数组var obj1 = {'0': '张一','1': '张二','2': '张三','age': 18,'height':170,'length': 2 // 这里指的是类数组的长度}var obj2 = {'0': 1,length: 1}
五、类数组借用数组原型方法和循环类数组
// 对象有length属性且属性名是数组的才算类数组var obj1 = {'0': '张一','1': '张二','2': '张三','age': 18,'height':170,'length': 2 // 这里指的是类数组的长度}var obj2 = {'0': 1,length: 1}// 类数组借用数组原型上的方法Object.prototype.push = Array.prototype.push;Object.prototype.splice = Array.prototype.splice;// 循环类数组for(var key in obj1){// 排除原型链上自定义的属性或者是方法if(obj1.hasOwnProperty(key)){console.log(obj1[key]);}}
