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] = item
obj.push(1);
obj.push(2);
console.log(obj);
3. 笔试题
// 数组去重
// 添加到Array.prototype
// 方法1
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.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);
// 方法2
Array.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)];
}
}
}