欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript 数组

程序员文章站 2022-12-28 08:21:31
JavaScript 数组: 1、它是值的有序集合 2、是无类型的,接受任意类型,且同个数组可以拥有多种类型 3、索引是基于 0 的 32 位数值,最大可能索引为 2^32-2 4、是动态的,在改变数组大小时不需重新分配空间 5、可以是稀疏的,即索引不一定要连续,元素与元素之间允许有空缺 6、有一个 ......

javascript 数组:

  1、它是值的有序集合

  2、是无类型的,接受任意类型,且同个数组可以拥有多种类型

  3、索引是基于 0 的 32 位数值,最大可能索引为 2^32-2

  4、是动态的,在改变数组大小时不需重新分配空间

  5、可以是稀疏的,即索引不一定要连续,元素与元素之间允许有空缺

  6、有一个 length 属性,返回数组长度

  7、是 javascript 对象的特殊形式

  8、继承自 array.prototype 中的属性,定义了一套丰富的数组操作

 

创建数组:

// 可以通过数组直接量或构造函数 array 来创建数组
let arr = [1, , 3];
console.log(arr.length);    // 输出3
arr = [, ,];
console.log(arr.length);    // 数组直接量语法允许有可选结尾逗号,所以输出2

/*
    arr = new array();  //创建空数组,等价[]
    arr = new array(5); // 创建长度为5的数组,此时值与索引都未定义
    // 当参数个数大于 1 时,参数指定数组的内容
    arr = new array(3, 4, {'x': 'y'}, [5, 6], "hello");
*/

 

数组的读写:

  1、使用 [ ] 操作符来访问数组中的一个元素,方括号里是一个返回非负整数值的任意表达式

  2、所有索引都是属性名,而只有 0~2^32-2 之间的整数属性名才是索引

  3、可以使用负数或非整数来索引数组,但数值会转换为字符串,作为属性名来使用

  4、若使用非负整数字符串,则将它转换为整数,并作为数组索引

  5、数组索引仅仅是对象属性名的一种特殊类型,即 javascript 数组没有 “越界” 错误的概念,当属性不存在时仅仅得到 undefined 值

let arr = [1, 2, 3, 4, 5];

console.log(arr[0]);    // 返回 arr[0]
console.log(arr[arr[0]+1]); // 返回 arr[2]
console.log(arr["2"]);  // 返回 arr[2]

arr["-1.2"] = 7;
console.log("arr['1.2']: ", arr[-1.2]); // 返回 7
console.log(arr[1.23]); //返回 undefined

 

稀疏数组:

  1、稀疏数组就是包含从 0 开始的不连续索引的数组

  2、稀疏数组的 length 属性值大于元素个数

  3、可以通过数组直接量、构造函数 array() 和 delete 操作符来创建稀疏数组

let a1 = [];
a1[100] = 0;    // 创建一个长度为 101 的稀疏数组

let a2 = new array(3);
a2[2] = 3;  // 创建一个长度为 3 的稀疏数组,等价 a2 = [, , 3]

let a3 = [1, 2, 3, 4];
delete a3[1];   // 使数组变成长度为 4 的稀疏数组

 注:减小数组 length 属性时会截去大于 length 部分的元素,我们可以设置 object.defineproperty(arr, "length", {writable: false}) 使数组 length 属性变成只读,即无法修改数组大小

 

多维数组:

  1、javascript 不支持真正的多维数组,但可以用数组的数组来近似地表示

  2、可多次使用 [ ] 操作符来访问多维数组的元素

 

let arr = [[[1, 2] ,[3, 4]], [5, 6]];
console.log(arr[0][0][0] + arr[0][1][1] + arr[1][1]); // 返回 1+4+6