发布于 1970-01-01 08:00
  • 4 个回答
    • Javascript 的數組也是對象,同時任何對象也可以像數組一樣使用,細節如下。

      參見:http://jayconrod.com/posts/52/a-tour-of-v8-object-representation

      詳細講解了 V8 的對象實現。

      對象的實現分爲兩層:

      • Named properties: in-object properties and extra properties

      • Numbered properties: fast elements

      而模式有 array mode 和 dictionary mode。一般情況會用 array mode,有時也會降級。

      Named properties

      in-object properties 使用公共 map 來描述其結構,某些情況(難以共用 map)會降級爲 Dictionary mode。

      V8 can handle minor divergences like this just fine, but if your code assigns all sorts of random properties to objects from the same constructor in no particular order, or if you delete properties, V8 will drop the object into dictionary mode, where properties are stored in a hash table. This prevents an absurd number of maps from being allocated.

      一個叫做 In-object slack tracking 的過程用來決定對象的大小,其後的屬性作爲 extra properties 使用單獨的數組儲存。

      Now I'm sure your next question is, "what happens when a new property is added after in-object slack tracking is complete?" This is handled by allocating an overflow array to store the extra properties. The overflow array can always be reallocated with a larger size as new properties are added.

      Numbered properties

      其中,fast elements 包括

      fast small integers
      fast doubles
      fast values

      然而 fast elements 有時也會降級爲 dictionary mode

      If you assign to an index that's way past the end of your the elements array, V8 may downgrade the elements to dictionary mode.

      當然由於分開儲存,降級並不會影響到其它類型的屬性。

      Because named properties and elements are stored separately, even if an object drops into dictionary mode for elements, named properties may still be accessed quickly (and vice versa).

      綜上,把 Array 當作 Associative Array 來用,並不會增加性能。

      2022-12-01 21:12 回答
    • 额。。。浅层次点说,下面2个是'等价'的:

      1. obj.attr = value
      2. obj['attr']=value

      只不过2里面支持obj['attr'+var]=value,能更加灵活,比如一个循环语句里面。

      2022-12-01 21:12 回答
    • 控制台试试就知道咯

      arr=[];
      arr["color"]="red";arr["name"]="apple";
      
      console.log(arr);
      console.log(arr.length);
      

      你这样做其实和使用对象是没有区别的

      2022-12-01 21:12 回答
    • 在javascript中,对象即关联数组,关联数组也即对象。javascript权威指南对象章节有说。

      2022-12-01 21:12 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有