为什么数组甚至使用字符串键保留这么多空格?

Vur*_*ral 3 javascript arrays hashmap

我有以下数组:

var arr = [];
console.log(arr.length); //Output: 0

arr["1231321"] = "abcd";
console.log(arr.length); //Output: 1231322

arr["1231321".toString()] = "abcd";
console.log(arr.length); //Output: 1231322

arr["a1231321"] = "abcd";
console.log(arr.length); //Output: 0

arr["1231321a"] = "abcd";
console.log(arr.length); //Output: 0
Run Code Online (Sandbox Code Playgroud)

这是小提琴:http://jsfiddle.net/HcrcR/

当我改变我的arr var arr = {};然后它工作.

但是它的原因是什么,即使我使用字符串键它开始从键推送数据?

ale*_*lex 6

我有以下数组/ hashmap:

这是一个ArrayJavaScript术语.

var arr = [];
console.log(arr.length); //Output: 0
Run Code Online (Sandbox Code Playgroud)

这是预期的,它是一个空阵列.

arr["1231321"] = "abcd";
console.log(arr.length); //Output: 1231322
Run Code Online (Sandbox Code Playgroud)

究其原因,length性质是如此之大,因为它总是+1比指数最高.使用字符串并不重要,Arrays和Objects的键始终是JavaScript中的字符串.

此Array对象的length属性是一个data属性,其值始终在数字上大于名称为数组索引的每个deletable属性的名称.

资源

arr["1231321".toString()] = "abcd";
console.log(arr.length); //Output: 1231322
Run Code Online (Sandbox Code Playgroud)

调用toString()字符串不会做任何事情(它已经是一个字符串).

arr["a1231321"] = "abcd";
console.log(arr.length); //Output: 0
Run Code Online (Sandbox Code Playgroud)

还期望,您在Array其上设置一个看起来不像索引的属性.

arr["1231321a"] = "abcd";
console.log(arr.length); //Output: 0
Run Code Online (Sandbox Code Playgroud)

往上看.在字符串内部没有解析来尝试获取数字.

当我改变我的arr var arr = {};然后它工作.

这就是对象在JavaScript中的工作方式.它们只是一堆字符串键值.