JavaScript 数组
JavaScript 数组用于在单一变量中存储多个值。
var score = [90, 80, 100];
什么是数组?
数组是js创建好的对象,数组可以用一个单一的名称存放很多值,并且还可以通过引用索引号来访问这些值,批量管理变量。
创建数组
1、使用数组文本创建 JavaScript 数组。
语法:
var array-name = [item1, item2, ...];
例:
var score = [90, 80, 100];
//空格和折行并不重要,声明可横跨多行
var score = [90,
80,
100
];
ps: 不要最后一个元素之后写逗号(比如 100,),可能存在跨浏览器兼容性问题。
2、使用 JavaScript 关键词 new
语法:
var array-name = new Array(item1, item2, ..);
例:
var score = new Array(90, 80, 100);
以上两个例子效果完全一样。无需使用 new Array()。
出于简洁、可读性和执行速度的考虑,一般使用第一种方法(数组文本方法)。
访问改变数组元素
通过引用索引号(下标号)来引用某个数组元素。
引用数组名来访问完整数组
var score = new Array(90, 80, 100);
var name = score;
访问 cars 中的首个元素的值:
var name = score[0];
修改 score 中的首个元素:
score[0] = 100;
[0] 是数组中的第一个元素。[1] 是第二个。数组索引从 0 开始。
数组是对象
数组是一种特殊类型的对象。在 JavaScript 中对数组使用 typeof 运算符会返回 “object”。但是,JavaScript 数组最好以数组来描述。数组使用数字来访问其“元素”。
//score[0] 返回 90:
var score = [90, 80, 100];
数组元素可以是对象
JavaScript 变量可以是对象。数组是特殊类型的对象。
正因如此,在相同数组中存放不同类型的变量。
可以在数组保存对象。可以在数组中保存函数。甚至可以在数组中保存数组。有三个不限制:
1)不限制元素中存储的数据类型
2)不限制下标越界:
// 越界取值:不报错,返回undefined
console.log(arr[3]);//undefined
// 越界赋值:不报错,自动在制定的位置新建元素保存数据
arr[5] = 100;
3)不限制数组的个数:可以随意在任意位置添加新元素 如果新添加元素后,下标不连续 – 稀疏数组
length 属性
length 属性返回数组的长度(数组元素的数目)。
例
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length; // fruits 的长度是 4
length 属性始终大于最高数组索引(下标)。
固定套路:
// 最后一个元素
console.log(arr1[arr1.length-1]);
// 倒数第二个元素
console.log(arr1[arr1.length-2]);
// 删除最后一个元素
arr1.length--;
// 删除数据末尾n个元素 arr1.length -= n;
存储原理
原始类型: 数据直接保存在变量本地,按值传递 修改新变量,不会影响原变量的值。
引用类型: 数据无法保存在变量的本地,复制额是地址 实际的数组始终只有一个。
结果:多个变量同时引用同一个数组 其中有一个修改了,其他的都会修改
关联数组
很多编程元素支持命名索引的数组。
具有命名索引的数组被称为关联数组(或散列)。
JavaScript 不支持命名索引的数组。
在 JavaScript 中,数组只能使用数字索引。
例:
var person = [];
person[0] = "Bill";
person[1] = "Gates";
person[2] = 62;
var x = person.length; // person.length 返回 3
var y = person[0]; // person[0] 返回 "Bill"
ps
假如使用命名索引,JavaScript 会把数组重定义为标准对象。
之后,所有数组的方法和属性将产生非正确结果。
例:
var person = [];
person["firstName"] = "Bill";
person["lastName"] = "Gates";
person["age"] = 62;
var x = person.length; // person.length 将返回 0
var y = person[0]; // person[0] 将返回 undefined
ps 关联数组(键值对数组)的值有意义且下标也是有意义的。查找更加方便的时候使用该类型的数组。
数组和对象的区别
在 JavaScript 中,数组使用数字索引,对象使用命名索引。
数组是特殊类型的对象,具有数字索引。
何时使用数组,何时使用对象?
JavaScript 不支持关联数组
如果希望元素名为字符串(文本)则应该使用对象。
如果希望元素名为数字则应该使用数组。
ps避免 new Array(),没有必要使用 JavaScript 的内建数组构造器 new Array()。使用 [] 取而代之!
[] == [] 返回结果是 false 因为[]是新建一个数组,
两个[]的地址是不同的 == 比较原始值