//下列数组的使用是否合法? var array = []; array[-1] = 2; array["b"] = 1; array[1,2] = 3; //下列两种情况要表达的意思是否一样? array["2"] = 2; array[2] = 2;
如果你已能为上述问题做出解答,那么可以忽略接下来我要讲的东西。
javascript中的数组本质是什么?
1、数组实例本质上是一个对象
var myArr = []; console.log(typeof myArr);
既然是个对象,那么就有相应的属性和方法,所以object自带的方法,数组实例也有。
2、对象属性的访问方式
访问对象的属性可以通过点操作符(.)或者中括号操作符([]),中括号操作符比点操作符功能强大的多,能用点操作符的地方都能用中括号操作符,反之不成立;如果你对于jsp中的EL表达式很熟悉的话,下面的东西就很容易理解。
//点操作符右边的属性名必须是合法的标识名 var obj = {}; obj.123 = 2; //不合法 //中括号中的属性名可以不是合法的标识名,里面还可以放变量 obj["123"] = 2; //合法 var name = "anonymous"; obj[name] = "hello"; // 相当于obj["anonymous"] = "hello";
3、“数组的下标必须是大于等于0并小于232-1 的整数,如果使用的数字过大,或者使用了负数、浮点数(或布尔值,对象及其他值),javascript会将它转化成一个字符串,用生成的字符串作为对象属性的名字,而不是数组的下标。” ------------这是摘自《javascript权威指南》中的一句话。
其实不管是不是整数,在数组内部,都是以属性的形式存储的。这也是数组为什么能用于for/in 循环(可以列出一个对象或者数组的所有属性)的原因
var arr = []; arr.push("bb"); console.log(arr.hasOwnProperty("0")); // 输出true //数组的for/in循环遍历 var array1 = [1]; array1["aa"]= 2; for(var index in array1){ console.log(index); //输出0,aa; 从这里也可以看出用for/in输出数组元素的弊端,把数组属性全部都输出了。 }
4、给数组添加属性,对数组length的影响。
var arr = [1,2]; arr["bb"] = 3; console.log(arr.length); //输出2