数组篇
定义方式
- 通过构造函数,new一个array,可以可以填写参数,一般除数字外不建议填
let arr = new Array();
let arr1 = new Array(3); //代表length为3,键值为undefined
0 in arr1; //false,这就好比,arr访问任何大于长度的索引值都是未定义,数组会忽略尾部逗号
- 通过字面量定义
let arr = [1,2,3,4,5,56]
##数组类型判定
- typeof,不建议,最客观也只返回object
let arr = [1,2];
typeof arr //object
- instanceof,不是最佳,原因是instanceof的原理是通过原型链判断两边是否相等,但是在多框架下,a框架下的数组原型在b框架下就不一定了
arr instanceof Array; //true
a instanceof b;
//a.__proto__.proto__.... === b.prototype;a通常为对象,b为构造函数
- Array.isArray(),能解决第二种的问题
Array.isArray(arr); //true
数组属性-length
- 增加数组长度
let arr = [1,2,3];
arr.length = 4;
arr[3] = undefined; //能增加length值,键值为undefined
3 in arr; //false,
- 减少数组长度
let arr = [1,2,3];
arr.length = 2;
consolelog(arr[2]); //undefined
arr.length = 0; //最简单的清空方式,[]
数组方法
- valueof(),toString(),通常用于数组对象转换成别的数据类型,arr.valueof().toString()
- push,pop,shift,unshift,4种方法都能改变元素组,前两个速度快,因为检索位置是尾部,后两者是首部。可以模仿栈和队的进入方式:
队先进先出:
let arr = [];
arr.push(1);
arr.push(2); //[1,2]
arr.shift() //[2]
队后进后出:
let arr = [];
arr.unshift(1);
arr.unshift(2); //[2,1]
arr.pop(); //[2]
栈后进先出:
let arr = [];
arr.unshift(1);
arr.unshift(2); //[2,1]
arr.shift(); //[1]
栈先进后出:
let arr = [];
arr.push(1);
arr.push(2); //[1,2]
arr.pop(); //[1]
- join(),将数组以特定字符串连接,并返回字符串,默认以逗号连接。如数组成员为空位,undefined或null,这三者将以空串代替。
let arr = [,undefined,null];
arr.join(";"); //;;
let arr1 = [1,,2];
arr1.join("."); //1.2
- concat(),将括号内参数与元素组进行拼接,返回新数组,原数组不变,参数类型不固定个数不固定。是浅拷贝,如参数为对象拷贝的是索引。
let arr = [1];
let obj = {a: 2};
let new_arr.concat("123",obj);
obj.a = 3;
console.log(new_arr); //[1, "123", {a: 3}]
- sort(), reverse(),改变原数组排列方式(会改变元素组),进行升序和降序。它是先将元素转为字符串,按首个字符的u码进行排列,这就导致排列出错。sort()可以添加传入一个函数作为参数,将排序进行改进
let arr = [1, 2, 12, 3, 4];
arr.sort(); //[1, 12, 2, 3, 4]
let arr = [1, 2, 12, 3, 4];
arr.sort(function (a, b) {
return a - b; //<0,在前;>0,在后;=0不变;
});
console.log(arr); //[1, 2, 3, 4, 12],
- slice()与splice(),
slice(start, end),类似切片用来截取获得新的数组,原数组不变,两个参数前闭后开,是浅拷贝
let arr = [1, 2, 3, 4, 5];
arr(); //[1, 2, 3, 4, 5]
arr(1, -1); //[2, 3, 4]
arr(0, 5); //[1, 2, 3, 4, 5]
arr(2, 1); //error, 前者不能大于后者(同+-符号)
splice(start, count, addElement1, addElement2, ...),从start开始删除,数量为count,接着添加后面的元素; 若填写一个参数则count默认length-arg-1,即删到末尾
let arr = [1, 2, 3, 4];
let del = arr.splice(1, 3,"345",67);
console.log(arr); //[1, "345", 67]
console.log(del); //[2, 3, 4]
let arr1 = [1, 2, 3, 4, 5];
arr1.splice(1);
console.log(arr1); //[1]