数组元素和数组对象属性
2018-01-05 本文已影响0人
默成S
var obj = {
count: 1
}
var myArray = ['red', 'white', 'black'];
console.log(myArray.length);
myArray.obj = obj;
console.log(myArray.length);
两次打印myArray的length是多少?为什么?
两次的结果都是3。
因为数组是对象的特殊形式,它同样有着属性名的概念,但和对象不同的是它使用0~2^32-2之间的整数属性名作为数组的索引,当不指定属性名时默认使用索引作为属性名。而length属性值,即数组的方法.length的值始终等于当前最大索引+1。
本例里初始赋值自动为三个元素建立了索引,最大索引为2。第一次myArray.length = 2 + 1,所以是3。而后加入的obj由于属性名obj不是索引,自然不影响索引号和length的值,所以第二次输出myArray.length还是3。
如果把obj在myArray中属性名改成符合索引格式的值,那么myArray.length的值就会改变了,而且不一定要接着索引2。代码如下:
var obj = {
count: 1
}
var myArray = ['red', 'white', 'black'];
console.log(myArray.length);
myArray["5"] = obj;
console.log(myArray.length);
两个重要概念:
1、js中一切都是对象。包括函数也是对象。对象可以动态添加属性值。
2、数组也是对象,只不过这个对象恰好有一个别的数据类型不具备的特点,可以通过索引来访问。
反思:
1、数组的基础知识没搞定:length属性代表数组中元素的个数,其值比数组中最大的索引大1,即使是一个var a = ['asdfghjk'];的数组,其length也是1.问题:那么,如果我想按照从0开始的顺序取数组中的一个值,该怎么取呢?</br>
2、myArray.obj = obj;并未给obj新增一个实体,而是只增加了一个属性:[ 'red', 'white', 'black', obj: { count: 1 } ]。obj是以键值方式添在myArray内。如果要增加一个实体应该使用push方法添加。