【发布时间】:2014-06-29 21:05:43
【问题描述】:
令我惊讶的是,这段代码实际上在 node.js 中有效:
var arr = new Array();
// also works: var arr = [];
arr[0] = 123;
arr['abc'] = 456;
arr; // node.js: [ 123, abc: 456 ], chrome: [123]
我一直认为数组按顺序存储其对象,只能通过整数键访问,就像 C++ 中的 std::vector 一样。然而,在这里它就像一个地图或一个对象。更令人困惑的是,相同的代码在 chrome 中按预期工作,返回一个包含单个条目 123 的数组。我认为 node.js 和 chrome javascript 使用相同的内部引擎 V8。这是怎么回事?
【问题讨论】:
-
不,它们实际上是 javascript 数组,类型为“对象”!
-
虽然 chrome 不会在控制台中显示
456,但arr.abc仍将是456。除非您显式访问变量或console.log(arr),否则它不会在控制台中显示它,它会记录:[123, abc: 456]基本上,这只是一个外观问题。 -
如果将其存储在
abc下,那并不是真正的哈希映射。只是一个键/值数组。
标签: javascript arrays node.js hashmap v8