文章目录
- 1. 新建数组
- 1.1 字面量
- 1.2 构造函数
- 2. 数组的索引 与 长度
- 数组主要用于封装/管理 多个任意类型的数据
- 数组是值的有序集合,由于弱类型的原因,js在同一个数组中可以存放
多种类型的元素
,且长度可以动态调整
;
总结:
- new Array(5) 中5是
数组长度(一个参数)
; new Array(5,6)中 5,6 是数组内容(多个参数)
- 索引都是属性名,但只有自然数 才是索引, 负数,非数字“索引”会变成数组的属性,数组的属性不会影响数组的长度
索引没必要连续
,数组length = 最大的下标index+1
- 设置length < 下标index 时, 会
删除多余下标对应的数组项
- 设置length > 下标index 时,
只在尾部追加空空间,不添加数组项
1. 新建数组
1.1 字面量
var arr = []; //创建空数组
var arr1 = [10]; // 创建数组 [10] -- 字面量方式,无论传入几个参数,都会把参数当作初始化内容
//最好最后不要带多余的”,”,不同浏览器下处理不同,现代浏览器上运行长度是3,但低版本IE下却是长度为4的数组,最后一条数据是undefined
1.2 构造函数
在使用构造函数创建数组时
传入一个数字参数,则会创建一个长度为参数的数组
- 如果
传入多个,则创建一个数组,参数作为初始化数据加到数组中
var arr = new Array(); //[]无参构造函数,创建一空数组
var arr1 = new Array(5); //[,,,,] 一个数字参数构造函数,创建指定长度为5的数组
// console.log(arr1.length); -- 5 console.log(arr1); -- [] ,数组是空的
var arr2 = new Array(4,'hello',new Date()); //带有初始化数据的构造函数,创建数组并初始化参数数据
// console.log(arr2.length); -- 3; console.log(arr2); -- [4,'hello',XXX]
2. 数组的索引 与 长度
- 数组的值可以通过 索引 进行读写操作 , 索引/下标 可以是一个得出非负整数的 变量或表达式
var a1=[1,2,3,4];
console.log(a1[0]); //1 --- 数组的值可以通过 自然数索引 进行读写操作,
var i=1;
console.log(a1[i]); //2 --- 索引/下标 可以是一个得出非负整数的 变量或表达式
console.log(a1[++i]); //3 --- 索引是表达式
- 数组也是对象,可以使用索引的奥秘在于:
数组会把索引值转换为对应字符串(1=>”1”)作为对象属性名
console.log(1 in a1);//true,确实是一个属性
- 索引特殊性在于数组会自动更新length属性
-
负数,甚至非数字”索引“都是允许
的,只不过这些会变成数组的属性,而不是索引 - 所有的索引都是属性名,但只有自然数(有最大值)才是索引,一般我们在使用数组的时候不会出现数组越界错误也正是因为此
- 数组的
索引可以不是连续的
,访问index不存在的元素的时候返回undefined - 因为js语法规定
数字不能作为变量名
,所以我们不能显示使用array.1这样的格式。
var a=new Array(1,2,3);
a[-10]="a[-10]";
a["sss"]="sss";
- 数组length属性等于数组中最大的下标index+1
var a=new Array(1,2,3);
a[100]=100;
console.log(a.length); //101 -- 数组length属性等于数组中最大的下标index+1
console.log(a[3],a[99]); //undefined undefined -- 虽然直接对a[100]赋值不会影响a[4]或a[99]
- 当强制把数组的length属性值设置为小于等于最大index值时,数组会自动删除indexd大于等于length的数据
var a=new Array(1,2,3,4,5);
a.length=2
console.log(a); //[1,2]
- 如果把length设置为大于最大index+1的值的时候,数组也会自动扩张,但是不会为数组添加新元素,
只是在尾部追加空空间
var a=new Array(1,2);
a.length=5; //数组会自动扩张,但是不会为数组添加新元素,只是在尾部追加空空间
console.log(a); //[1,2] //后面没有3个undefined