Array基础

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



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值