数组
1.声明数组的两种方式
####(1)Array构造函数
var colors = new Array();
构造函数的参数有两种类型,一种是整数,表示数组的长度;一种是数组的项,可以是任意类型。
var colors = new Array(20);
var colors = new Array("red","blue","green");
####(2)字面量方法
var colors = ["red","blue","green"];
注意:最后一项后面不能加‘,’,也不能[,,,,]
这样创建空数组。
2. 数组检测方法
####(1)instanceof
var ary = [1,23,4];
console.log(ary instanceof Array); //true
####(2)原型链方法
var ary = [1,23,4];
console.log(ary.__proto__.constructor==Array);
console.log(ary.constructor == Array);
上述两种方式的问题在于,它假设只有一个全局执行环境。如果网页中存在多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组就与在第二个框架中原生创建的数组分别具有各自不同的构造函数。
(3)es5中使用的方法
利用es5的isArray()方法:
var ary = [1,23,4];```
console.log(Array.isArray(ary));
相当准确,但是会对浏览器的版本有要求,出现
#### (4)toString()方法
var ary = [1,23,4];
Object.prototype.toString.call(ary) == ‘[object Array]’; //true
可以通过toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,把需要检测的对象作为第一个参数传入。
没有兼容性要求。
缺点:只能判断对象,12种对象。
#####比较稳妥的方法::首先判断浏览器是不是支持es5,`typeof isArrray == function`
3.数组操作方法
----
####(1)栈方法
push() 方法将一个或多个元素添加到数组的末尾,并返回数组的新长度。
`var numbers = [1, 2, 3];`
`numbers.push(4);`
`console.log(numbers); // [1, 2, 3, 4]`
pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
`let a = [1, 2, 3];`
`a.length; // 3`
`a.pop(); // 3`
`console.log(a); // [1, 2]`
`a.length; // 2`
####(2)队列方法
shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
`let a = [1, 2, 3];`
`let b = a.shift();`
`console.log(a); // [2, 3]`
`console.log(b); // 1`
shift 方法移除索引为 0 的元素(即第一个元素),并返回被移除的元素,其他元素的索引值随之减 1。如果 length 属性的值为 0 (长度为 0),则返回 undefined。
unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度。
`let a = [1, 2, 3];`
`a.unshift(4, 5);`
`console.log(a);// [4, 5, 1, 2, 3]`
####(3)重排序方法
sort() 方法在适当的位置对数组的元素进行排序,并返回数组。 sort 排序不一定是稳定的。默认排序顺序是根据字符串Unicode码点。
var fruit = [‘cherries’, ‘apples’, ‘bananas’];fruit.sort(); // [‘apples’, ‘bananas’, ‘cherries’]
var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]```
####自定义排序:
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);// [1, 2, 3, 4, 5]
伪数组:
(1)HTMLCollection 对象 ,NodeList 对象
(2)arguments对象
伪数组是不能调用数组的操作方法的。那么怎样将伪数组变成数组呢。主要由两种思路:一是自定义一个数组,将伪数组中的元素赋值给真数组。二是调用Array原型上的方法:
Array.prototype.slice.call()
在 jQuery 中给出的判断一个对象是否为伪数组的方法 isArrayLike,必须满足三个条件的至少一个才能称为伪数组。
- 是数组
- 长度为 0
- lengths 属性是大于 0 的数字类型,并且obj[length - 1]必须存在 3. lengths 属性是大于 0 的数字类型,并且obj[length - 1]必须存在