var arr = [];
arr[0] = 0;
arr[1] = 1;
arr.foo = 'c';
console.log(arr.length);
以上代码的执行结果是什么呢?
本质上,数组属于一种特殊的对象。typeof
运算符会返回数组的类型是object。
这里说一下数组的特性
数组的特殊性体现在,它的键名是按次序排列的一组整数(0,1,2…)。
由于数组成员的键名是固定的(默认总是0、1、2…),因此数组不用为每个元素指定键名,而对象的每个成员都必须指定键名,对象的键名一律为字符串,所以,数组的键名其实也是字符串。数组键名可以使用数字获取到,是因为非字符串的键名会自动转换为字符串
var arr = ['a', 'b', 'c'];
Object.keys(arr)
// ["0", "1", "2"]
var arr = ['a', 'b', 'c'];
arr['0'] // 'a'
arr[0] // 'a'
这里再回到上个问题,数组既然是一个特殊的对象,那就可以给对象添加foo属性和值,并不会影响到组数本身,最后的结果应该是2。