Adakah susunan sifat objek dijamin dalam JavaScript?
P粉663883862
P粉663883862 2023-10-12 20:05:36
0
2
441

Jika saya mencipta objek seperti ini:

var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";

Adakah objek yang dijana sentiasa kelihatan seperti ini?

{ prop1 : "Foo", prop2 : "Bar" }

Iaitu, adakah hartanah dalam susunan yang sama seperti yang saya tambahkan?

P粉663883862
P粉663883862

membalas semua(2)
P粉006977956

Ya (tetapi tidak selalu dalam susunan sisipan).

Kebanyakan penyemak imbas mengulangi sifat objek sebagai:

  1. Kunci integer positif dalam tertib menaik (dan rentetan seperti "1" dihuraikan 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 #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 akan dikekalkan, kecuali kekunci yang memutuskan kepada integer positif (cth. "7" atau "99"), dalam hal ini penyemak imbas akan berkelakuan berbeza. Sebagai contoh, Chrome/V8 tidak mempertimbangkan tertib sisipan apabila kunci diselesaikan kepada nombor.

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

Perhatikan bahawa tingkah laku ES2015 ialah contoh yang baik bagi spesifikasi bahasa yang didorong oleh tingkah laku sedia ada, bukan sebaliknya. Untuk pemahaman yang lebih mendalam tentang mentaliti keserasian ke belakang, lihat http://code.google.com/p/v8/issues/detail?id=164, pepijat Chrome yang memperincikan sebab di sebalik keputusan Reka bentuk tingkah laku tertib lelaran Chrome. Menurut salah satu ulasan (agak pendapat) pada laporan pepijat:

P粉541565322

Sejak ES2015, susunan lelaran objek mengikut set peraturan tertentu, tetapi ia tidak (sentiasa) ) mengikut susunan sisipan. Ringkasnya, susunan lelaran ialah gabungan tertib sisipan untuk kekunci rentetan dan tertib menaik untuk kekunci seperti angka:

// key order: 1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }

Menggunakan tatasusunan atau objek PetaMap object 可能是实现此目的的更好方法。 MapObject mungkin merupakan cara yang lebih baik untuk mencapai perkara ini. Peta dan Objek dijamin untuk mengulang kekunci dalam susunan sisipan, tanpa pengecualian:

Perlu diingat bahawa sebelum ES2015, susunan sifat dalam objek tidak dijamin sama sekali. Takrifan objek berasal daripada ECMAScript edisi ke-3 (pdf):

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!