Rumah > Soal Jawab > teks badan
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粉0069779562023-10-13 16:31:53
Ya (tetapi tidak selalu dalam susunan sisipan).
Kebanyakan penyemak imbas mengulangi sifat objek sebagai:
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粉5415653222023-10-13 14:55:26
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 Map< /code> object
Map
与 Object
mungkin merupakan cara yang lebih baik untuk mencapai perkara ini. 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):