JavaScript数组(上)

数组篇

定义方式

  • 经过构造函数,new一个array,能够填写参数,通常除数字外不建议填
let arr = new Array();
let arr1 = new Array(3);  //表明length为3,键值都是空位
0 in arr1;                //false,由于是空位,因此不存在索引,数组会忽略尾部逗号
  • 经过字面量定义
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;
3 in arr;            //false
arr[3] = undefined;  //能增长length值,键值为undefined
3 in arr;            //true,
  • 减小数组长度
let arr = [1,2,3];
arr.length = 2;
console.log(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]

栈先进后出:prototype

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 = 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),相似切片截取,返回截取的新数组,原数组不变,两个参数前闭后开,是浅拷贝
    splice(start, count, addElement1, addElement2, ...),从start开始删除,数量为count,接着添加后面的元素; 若填写一个参数则 count默认length-arg-1,即删到末尾;返回被删除的数组,原数组改变
let arr = [1, 2, 3, 4, 5];
arr.slice();             //[1, 2, 3, 4, 5]
arr.slice(1, -1);        //[2, 3, 4]
arr.slice(0, 5);         //[1, 2, 3, 4, 5]  
arr.slice(2, 1);         //error, 前者不能大于后者(同+-符号)
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]
相关文章
相关标签/搜索