cari

Rumah  >  Soal Jawab  >  teks badan

Adakah susunan sifat objek dijamin dalam JavaScript?

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粉663883862P粉663883862414 hari yang lalu484

membalas semua(2)saya akan balas

  • P粉006977956

    P粉0069779562023-10-13 16:31:53

    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:

    balas
    0
  • P粉541565322

    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 Peta< /code>Map< /code> 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):

    balas
    0
  • Batalbalas