1. 数组方法
1.concat
concat方法创建一个新的数组,它由被调用的对象中的元素组成,每个参数的顺序依次是该参数的元素(如果参数是数组)或参数本身(如果参数不是数组)。它不会递归到嵌套数组参数中。
concat方法不会改变this或任何作为参数提供的数组,而是返回一个浅拷贝,它包含与原始数组相结合的相同元素的副本。
// var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])// 返回拼接后的数组var arr1 = ['i', 'l', 'o', 'v'];var arr2 = ['e', 'y', 'o', 'u'];var newArr = arr1.concat(arr2);console.log(newArr);// ['i', 'l', 'o', 'v', 'e', 'y', 'o', 'u']var arr1 = ['i', 'l', 'o', 'v'];var arr2 = ['e', 'y', 'o', 'u'];var arr3 = ['!'];// 可以拼接多个数组var newArr = arr1.concat(arr2, arr3);console.log(newArr); // ['i', 'l', 'o', 'v', 'e', 'y', 'o', 'u', '!']// concat()不传入参数,则concat 会返回调用此方法的现存数组的一个浅拷贝。var arr = [{name: '张三',},{name: '李四'}]var newArr = arr.concat();newArr.push({name:'王二'});newArr[0].name = '11';console.log(newArr, arr);
2. toString
// 一个表示指定的数组及其元素的字符串。包含用逗号分隔的每个数组元素var arr = ['a', 'b', 'c'];var str = arr.toString();console.log(str); // a,b,c// 当一个数组被作为文本值或者进行字符串连接操作时,将会自动调用其toString方法。var arr = [1, 2];console.log(arr + 'b');// 1,2b
3. slice
slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。
// arr.slice([begin[, end]])// 俩个参数 => 左闭右开var arr = [1, 2, 3, 4, 5];var newArr1 = arr.slice(2);console.log(newArr1); // [3, 4, 5]var newArr2 = arr.slice(2, 4);console.log(newArr2);// [3, 4]var newArr3 = arr.slice(-2, 4);console.log(newArr3);// [4]var newArr4 = arr.slice();console.log(newArr4);// [1, 2, 3, 4, 5]var newArr5 = arr.slice(-2);console.log(newArr5); // [4, 5]
slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个新数组。你只需将该方法绑定到这个对象上。 一个函数中的 arguments 就是一个类数组对象的例子。
function list(){// Array.prototype.slice.caLL() === [].slice.call()// return Array.prototype.slice.call(arguments);return [].slice.call(arguments);}var list1 = list(1, 2, 3);console.log(list1);// [1, 2, 3]
4. join, split
// join 返回由数组内的元素连接的字符串var arr = [1, 2, 3, 4];var newArr = arr.join(' ');console.log(newArr);// 1 2 3 4
// str.split([separator[, limit]])// 返回源字符串以分隔符var str = '1,2,3,4';var arr = str.split(',', 3);console.log(arr); // [1, 2, 3]
2. 类数组
function test(){console.log(arguments);}test(1, 2, 3, 4, 5);var obj = {'0': 1,'1': 2,'2': 3,'3': 4,'4': 5,'length': 5}console.log(obj);

function test(){console.log(arguments);}test(1, 2, 3, 4, 5);var obj = {'0': 1,'1': 2,'2': 3,'3': 4,'4': 5,'length': 5,'splice': Array.prototype.splice,'push': [].push}obj.push(6);console.log(obj);

var obj = {'2': 4,'3': 25,'length': 2,'push': Array.prototype.push}// push(item) => arr[length] = itemobj.push(1);obj.push(2);console.log(obj);
3. 笔试题
// 数组去重// 添加到Array.prototype// 方法1Array.prototype.unique = function(){var obj = {};var arr = []for(var i = 0; i < this.length; i++){var item = this[i];if(item in obj){// 也可以用obj.hasOwnProperty(item)}else{obj[item] = item;arr.push(item);}}return arr}Array.prototype.unique = function(){var obj = {};var arr = []for(var i = 0; i < this.length; i++){var item = this[i];if(!(item in obj)){obj[item] = item;arr.push(item);}}return arr}var arr = [1, 2, 3, 4, 2, 4, 3, 'a', 'a'];var arr1 = arr.unique();console.log(arr1);// 方法2Array.prototype.unique = function(){var arr = [];for(var i = 0; i < this.length; i++){var item = this[i];if(arr.indexOf(item) === -1){arr.push(item);}}return arr}
// 封装typeof// undefined object string boolean number function// null// [object Array]// [object Object]// [object Number]// [object String]// [object Boolean]// [object Date]// [object RegExp]// [object Function]function myTypeof(val){var type = typeof(val);var toStr = Object.prototype.toString;var allTypes = {'[object Array]': 'object-array','[object Object]': 'object-Object','[object String]': 'object-String','[object Number]': 'object-Number','[object Date]': 'object-Date','[object RegExp]': 'object-RegExp','[object Function]': 'object-Function','[object Boolean]': 'object-Boolean',};if(type !== 'object'){return type;}else{if(val === null){return null;}else{return allTypes[toStr.call(val)];}}}
