一、创建数组的两种方法
1.使用直接量创建数组:
1).在方括号中将组组元素用逗号隔开即可.
2).数组直接量中的值不一定是要常量,它们可以是任意的表达式
3).它可以包含对象直接量或其他数组直接量
4).如果省略数组直接量中的某个值,省略的值的元素将被赋予undefined;
1).
var empty = []; var primes = [2, 3, 5, 7, 11]; var misc = [1.1, true, "a", ];//三个不同类型的元素和结尾的逗号,不建议
2).
var base = 1024;
var table = [base, base + 1, base + 2, base + 3];
3).
var b = [[1,{x:1,y:2}],[2,{x:3,y:4}]];
4).
var count = [1, , 3]; //数组中有三个元素,第二个值为undefined
var undefs = [, , ]; //两个元素,都是undefined
2.调用构造函数Array()创建数组:
1).调用时没有参数,该方法创建一个没有任何元素的空数组,等于数组直接量[].
2).调用时有一个值是参数,它指定长度。
3).显式指定两个或多个数组元素或者数组的一个非数组元素
1).
var a =new Array();//调用时没有参数
2).
var a = new Array(10);//该方法创建指定长度的数组,当预先知道所需元素的个数时,这种形式的Array()构造函数可以用来分配一个数组空间。注意,数组中没有存储值。甚至数组的索引,“0”,“1”等还未定义。
3).
var a = new Array(5, 4, 3, 2, 1, "testing,testing");//用这种形式,构造的函数参数将会成为新的数组元素,使用数组字面量比这样使用Array()构造函数要简单多了。
二、数组元素的读和写
1.数组元素的读和写:
1).使用[]操作符来访问数组中的一个元素。
2).数组的引用位于方括号的左边,方括号中是一个返回非负整数值的任意表达式,使用该表达式可以读也可以写数组中的一个元素。
var a = ["world"]; //从一个元素的数组开始 var value = a[0]; //读取第0个元素 a[1] = 3.14; //写第1个元素 var i = 2; a[i] = 3; //写第2个元素 a[i + 1] = "hello"; //写第3个元素 a[a[i]] = a[0] //读取第0和第2个元素,写第3个元素
2.特别注意:
1).数组的特别之处在于,当使用小于2的32次方的非负数整数作为属性名时,数组会自动维护其length属性值。如上,创建仅有一个元素的数组,然后在1、2、3、处进行赋值,当我们这么做时,数组的length变为4
2).数组的索引 和 数组的属性名:
所有的索引都是其属性名,但只有0到(2的32次方-2)的整数属性名才是索引。
所有的数组都是对象,可以为其创建任意名字的属性。但如果使用的属性是数组的索引,数组的特殊行为就是将根据需要更新它们的length属性值。
3).可以使用负数或非整数来索引数组。
这种情况下,数值转换为字符串,字符串作为属性名来用。既然名字不是非负整数,就只能当做常规的对象属性,而非数组的所有,数组不会自动维护其length属性值
同样,使用是非负整数的字符串,它就当做数组索引,而非对象的属性。当使用一个浮点数和一个整数相等时情况也是一样的:
a[-1.23] = true; //这将创建一个名为"-1.23"的属性 a["1000"] = 0; //这是数组的第1001个元素 a[1.000] //和a[1]相等
4).javascript数组索引 仅仅是对象属性名的一种特殊类型,这意味着javascript数组没有“越界”错误的概念。
当试图查询对象中不存在的属性时,不会报错。只会得到undefined值。类似于对象,对于对象同样存在这种情况。
既然数组是对象 ,那么它们可以从原型中继承元素:在ECMAScript5中,数组可以定义元素的getter和setter方法。
如果一个数组确实继承了元素或使用了元素的getter和setter方法,你应该期望它使用非优化的代码路径:访问这种数组的元素的时间会与常规对象属性的查找时间相近。