如题,原来一直误以为js里面不能像php那样定义关联数组,如a["color"]=red;
但是前几天偶然发现可以。
想请教一下这样的定义方式与操作对象相比是不是更高效?两者的后台实现方式是不是不一致呢?
//定义对象
obj={color:"red",name:"apple"};
//关联数组
arr=[];
arr["color"]="red";arr["name"]="apple";
obj=[];obj.push(arr);
如题,原来一直误以为js里面不能像php那样定义关联数组,如a["color"]=red;
但是前几天偶然发现可以。
想请教一下这样的定义方式与操作对象相比是不是更高效?两者的后台实现方式是不是不一致呢?
//定义对象
obj={color:"red",name:"apple"};
//关联数组
arr=[];
arr["color"]="red";arr["name"]="apple";
obj=[];obj.push(arr);
额。。。浅层次点说,下面2个是'等价'的:
只不过2里面支持obj['attr'+var]=value,能更加灵活,比如一个循环语句里面。
控制台试试就知道咯
arr=[];
arr["color"]="red";arr["name"]="apple";
console.log(arr);
console.log(arr.length);
你这样做其实和使用对象是没有区别的
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
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。
一個叫做 In-object slack tracking 的過程用來決定對象的大小,其後的屬性作爲 extra properties 使用單獨的數組儲存。
Numbered properties
其中,fast elements 包括
fast small integers
fast doubles
fast values
然而 fast elements 有時也會降級爲 dictionary mode
當然由於分開儲存,降級並不會影響到其它類型的屬性。
綜上,把 Array 當作 Associative Array 來用,並不會增加性能。