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 = {};然后它工作.
但是它的原因是什么,即使我使用字符串键它开始从键推送数据?
我有以下数组/ 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中的工作方式.它们只是一堆字符串键值.