Adakah JavaScript menjamin susunan sifat objek?
P粉604848588
P粉604848588 2023-08-20 17:42:13
0
2
490
<p>Jika saya mencipta objek seperti ini: </p> <pre class="brush:php;toolbar:false;">var obj = {}; obj.prop1 = "Foo"; obj.prop2 = "Bar";</pre> <p>Adakah objek yang dijana sentiasa kelihatan seperti ini? </p> <pre class="brush:php;toolbar:false;">{ prop1 : "Foo", prop2 : "Bar" }</pre> <p>Iaitu, adakah sifat akan berada dalam susunan yang sama seperti yang saya tambahkan? </p>
P粉604848588
P粉604848588

membalas semua(2)
P粉894008490

Ya (tetapi tidak selalu dalam susunan sisipan).

Kebanyakan penyemak imbas mengulangi sifat objek dalam susunan berikut:

  1. Kunci integer positif diisih mengikut tertib menaik (serta rentetan seperti "1" yang menghuraikan kepada integer)
  2. Kunci rentetan dalam susunan sisipan (ES2015 menjamin ini dan semua pelayar menghormatinya)
  3. Nama simbol dalam susunan sisipan (ES2015 menjamin ini dan semua pelayar menghormatinya)

Sesetengah penyemak imbas lama menggabungkan kategori 1 dan kategori 2, mengulangi semua kekunci dalam susunan sisipan. Jika kunci anda berkemungkinan besar untuk diselesaikan kepada integer, sebaiknya jangan bergantung pada sebarang susunan lelaran tertentu.

Spesifikasi bahasa semasa (setakat ES2015) Tertib sisipan dikekalkan, tetapi gelagat untuk kunci yang diselesaikan kepada integer positif (seperti "7" atau "99") berbeza antara penyemak imbas. Contohnya, Chrome/V8 tidak menghormati tertib sisipan apabila kekunci diselesaikan kepada nombor.

Spesifikasi bahasa lama (pra-ES2015): Tertib lelaran secara teknikalnya tidak ditentukan, tetapi semua penyemak imbas utama mematuhi gelagat ES2015.

Sila ambil perhatian bahawa tingkah laku ES2015 ialah contoh spesifikasi bahasa yang baik yang didorong oleh tingkah laku sedia ada, bukan sebaliknya. Untuk pandangan yang lebih mendalam tentang cara berfikir keserasian ke belakang ini, lihat http://code.google.com/p/v8/issues/detail?id=164, pengenalan terperinci kepada reka bentuk tingkah laku tertib lelaran Chrome Pelaporan pepijat Chrome membuat keputusan. Menurut salah satu komen (agak subjektif) dalam laporan pepijat ini:

P粉574695215

Tertib lelaran objek mengikut peraturan tertentu sejak ES2015, tetapi ia tidak selalu mengikut tertib sisipan. Ringkasnya, susunan lelaran ialah gabungan tertib sisipan untuk kekunci rentetan dan tertib menaik untuk kekunci seperti angka:

// 键的顺序:1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }

Ini boleh dicapai dengan lebih baik menggunakan tatasusunan atau objek PetaMap对象可以更好地实现这一点。 MapObject. Peta mempunyai beberapa persamaan dengan Objek dan dijamin untuk mengulangi kekunci dalam susunan sisipan, tanpa pengecualian:

Perlu diingat bahawa sebelum ES2015, susunan sifat dalam objek tidak dijamin sama sekali. Definisi objek daripada ECMAScript Edisi Ke-3 (pdf) :

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan