我曾经认为JavaScript中的对象只是简单的键值对,即哈希表,但在阅读这篇文章之后,我感到困惑。
作者特别提到:
作者特别提到:
所以,在此之前它到底是什么?整段话让我感到困惑。有人可以解释一下吗?当你使用一个对象就像它是一个哈希表时,它就会被转换成一个哈希表。
所以,在此之前它到底是什么?整段话让我感到困惑。有人可以解释一下吗?当你使用一个对象就像它是一个哈希表时,它就会被转换成一个哈希表。
// running node with `--allow-natives-syntax` flag
var obj = { a: true, b: false };
%HasFastProperties(obj); // true (Fast mode)
delete obj.a;
%HasFastProperties(obj); // false (Dictionary mode)
var obj = { a: true, b: false };
%HasFastProperties(obj); // true (Fast mode)
// add lots of properties
for (var i = 0; i < 100; i++) {
obj["prop" + i] = i;
}
%HasFastProperties(obj); // false (Dictionary mode)
它转换为字典模式的原因是出于性能优化考虑。在字典模式下添加/删除属性比快速模式更快,因此V8引擎会针对检测到的这种行为进行优化,以更改结构而不是属性访问 (在此处阅读更多信息)。