Javascript的Array对象是用于构造数组的全局对象,数组是类似于列表的高阶对象
1. 创建数组:
const fruits = ["apple", "banana"]; //字面量的方式创建数组
const animals = new Array(); //利用Array通过new关键字创建数组对象animals
2. 访问数组元素
const apple = fruits[0]; //通过索引访问数组元素
const banana = fruits[fruits.length - 1];
fruits.forEach(function(item, index, array) {
console.log(item, index);
});
//通过Array对象的方法forEach便利数组元素
for( let i = 0 ; i < fruits.length; i++ ) {
console.log(fruits[i]);
}
//通过for循环遍历数组,输出数组的元素
3. 对数组的基本操作
//增加元素
const newFruits1 = fruits.push("Orange"); //将‘orange’添加到数组的末尾
// newFruits1 = ['apple', 'banana', 'Orange']
const newFruits2 = fruits.unshift('Strawberry'); //将‘strawberry’添加到数组的开头
// newFruits2 = ['Strawberry', 'apple', 'banana']
//删除元素
const newFruits3 = newFruits1.pop(); //删除数组元素下标值为length-1的元素
// newFruits3 = ['apple', 'banana']
const newFruits4 = newFruits2.shift(); //删除数组元素下标值为0的元素
// newFruits4 = ['apple, banana']
//查找元素
const index = fruits.indexOf('banana'); //找出banana元素在fruits数组中的下标index
4. 语法、描述
- Array构造器会根据给定的元素创建一个Javascript数组,但是当仅有一个参数且为数组时除外
- new Array(4);此时将返回一个length的值等于arrayLength的数组对象(言外之意就是该数组此时并没有包含任何实际的元素,不能理所当然地认为它包含arrayLength个值为 undefined的元素)。如果传入的参数不是有效值,则会抛出RangeError异常
- Javascript数组的长度和元素类型都是非固定的,并且数据在内存中也可以不连续,所以javascript数组不一定是密集型的
- 使用非整数并通过方括号或点号类访问或设置数组元素时,所操作的并不是数组列表汇中的元素,而是数组对象的属性集合上的变量
- 数组对象的属性和数组元素列表是分开存储的,并且数组的遍历和修改操作也不能作用于这些命明属性
- 访问数组元素:如果指定的索引是一个无效值, Javascript数组并不会报错,而是返回undefined
- 数组元素可以看作是数组对象的属性,但不能使用"."语法引用数组元素,例如: fruits.0,此时会抛出SyntaxError异常
- 在Javascript中,以数字开头的属性不能用点号引用,必须用方括号。例如:
//renderer对象有一个3d属性 renderer.3d.setTexture(model, 'character.png); //语法错误 renderer.['3d'].setTexture(model, 'character.png); fruits[1]也可以写成fruits['1']。 fruits[1]中的1会被JavaScript解释器通过调用toString隐式转换成字符串
- length和数字下标之间的关系:
//使用一个合法的下标为数组元素赋值,并且该下标超出了当前数组的大小的时候,解释器会同时修改length fruits[5] = 'mango'; console.log(fruits[5]); //mango console.log(Object.keys(fruits)); //['0', '1', '5'] console.log(fruits.length); //6 //为length赋一个更小的值则会删掉一部分元素 fruits.length = 1; console.log(Object.keys(fruits)); //['0', '1'] console.log(fruits.length); //2 //Array.length:Array构造函数的length属性,其值为1,(该属性为静态属性,不是数组实例的length属性)
5. 方法
//Array.from()
console.log(Array.from('foo'); // [ 'f', 'o', 'o']
console.log(Array.from( Array.from([2, 3, 4], x => x *2)); // [4, 6, 8]
//利用from进行数组去重
function combine() {
const arr = [].concat.apply([],arguments)); //没有去重的新数组
return Array.from(new Set(arr));
}
//功能,将类似数组或可迭代的对象,创建一个新的、浅拷贝的数组返回
//from的length属性值为1,即Array.from.length = 1
//Array.from()有一个可选参数mapFn,让你可以在最后生成的数组上再执行一次map方法后再返回。也就是手Array.from(obj, mapFn, thisArg)就相当于Array.from(obj).map(mapFn, thisArg),除非创建的不是可用的中间数组。这对一些数组的子类,如typed arrays来说很重要,因为中间数组的值在调用map()时,需要是适当的类型
//Array.isArray()
Array.isArray([1, 2, 3]); // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar'); // false
Array.isArray(undefined); // false
//用于确定传递的值是否是数组
//是数组则返回true,否则返回false