Joe*_*oel 8 javascript arrays v8 hashmap node.js
令我惊讶的是,这段代码实际上在node.js中有效:
var arr = new Array();
// also works: var arr = [];
arr[0] = 123;
arr['abc'] = 456;
arr; // node.js: [ 123, abc: 456 ], chrome: [123]
Run Code Online (Sandbox Code Playgroud)
我一直以为数组按顺序存储它的对象,只能通过整数键访问,比如C++中的std :: vector.但是,这里它的作用就像一张地图或一个物体.更令人困惑的是,相同的代码在chrome中按预期工作,返回一个带有单个条目的数组,123.我认为node.js和chrome javascript使用相同的内部引擎V8.这里发生了什么?
JavaScript允许你扩展的物体在飞行中,并作为Array是一个对象,你可以这样做.
你在做什么是为你的数组添加一个新属性abc并为其赋值456.
所以你可以说Javascript中的每个对象都可以以某种方式用作哈希映射.
编辑
似乎Chrome Array在转储时过滤了对象的非数字属性,而Node转储了每个用户定义的属性.在我看来,Node的方式更好,因为字母数字属性在for in语句中可用:
var a = [1];
a['abc'] = 2;
for (var i in a) {
console.log(i);
}
// Prints:
// 0
// abc
Run Code Online (Sandbox Code Playgroud)
答案是对的,如果你试图显示数组的长度,行为可能更容易理解.
var ar = []
ar[0] = 42
console.log(ar.length) // 1
ar[12] = 21
console.log(ar.length) // 13
ar['ab'] = 1
console.log(ar.length) // 13 (separate property, not in array)
ar[ar.length] = 33
console.log(ar.length) // 14
ar.push(55)
console.log(ar.length) // 15
console.log(ar) // display all items specified above
//[ 42, , , , , , , , , , , , 21, 33, 55, ab: 1 ]
// which in fact really is:
// [ 42, , , , , , , , , , , , 21, 33, 55] as array and
// special property of array object - 'ab':1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15026 次 |
| 最近记录: |