Jadual Kandungan
回复内容:
對象的實現分爲兩層:
Named properties
Numbered properties
Rumah pembangunan bahagian belakang tutorial php javascript也支持关联数组?与对象相比是不是存取效率更高?

javascript也支持关联数组?与对象相比是不是存取效率更高?

Jun 06, 2016 pm 08:40 PM
javascript php

如题,原来一直误以为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);

Javascript 的數組也是對象,同時任何對象也可以像數組一樣使用,細節如下。

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 來用,並不會增加性能。

额。。。浅层次点说,下面2个是'等价'的:

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

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

控制台试试就知道咯

<code>arr=[];
arr["color"]="red";arr["name"]="apple";

console.log(arr);
console.log(arr.length);
</code>
Salin selepas log masuk

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

在javascript中,对象即关联数组,关联数组也即对象。javascript权威指南对象章节有说。
javascript也支持关联数组?与对象相比是不是存取效率更高?

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Pembalakan CakePHP Pembalakan CakePHP Sep 10, 2024 pm 05:26 PM

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Perkhidmatan CakePHP Perkhidmatan CakePHP Sep 10, 2024 pm 05:26 PM

Bab ini membincangkan maklumat tentang proses pengesahan yang terdapat dalam CakePHP.

See all articles