我一直认为
javascript中的对象是简单的键值对,即哈希表,但在阅读了
this篇文章之后我很困惑.
作者特别说:
when you use an object as if it was a hash table,it will be turned
into a hash table.
那么,以前到底是怎么回事?特别是整个段落让我困惑.有人能说清楚吗?
解决方法
根据
this answer,在V8中,对象可以有两种模式 – 字典模式和快速模式.
对象最初处于快速模式,其中没有哈希映射 – 无需计算 – 属性访问.它在C中存储像结构一样的对象.只有当你开始使用“对象就好像它是一个哈希表时,它才会变成一个哈希表”–dictionary模式.一旦发生这种情况,您将获得在后台用于属性访问的哈希映射的性能损失.
例如:
// 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引擎在检测到此行为时优化了更改结构而不是属性访问(Read more here).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。