Urutan properti di Objek normal adalah subjek kompleks dalam Javascript.
Sementara di ES5 secara eksplisit tidak ada pesanan yang ditentukan, ES2015 memiliki pesanan dalam kasus tertentu. Diberikan adalah objek berikut:
o = Object.create(null, {
m: {value: function() {}, enumerable: true},
"2": {value: "2", enumerable: true},
"b": {value: "b", enumerable: true},
0: {value: 0, enumerable: true},
[Symbol()]: {value: "sym", enumerable: true},
"1": {value: "1", enumerable: true},
"a": {value: "a", enumerable: true},
});
Ini menghasilkan urutan berikut (dalam kasus tertentu):
Object {
0: 0,
1: "1",
2: "2",
b: "b",
a: "a",
m: function() {},
Symbol(): "sym"
}
- kunci seperti integer dalam urutan menaik
- kunci normal dalam urutan penyisipan
- Simbol dalam urutan penyisipan
Jadi, ada tiga segmen, yang dapat mengubah urutan penyisipan (seperti yang terjadi dalam contoh). Dan kunci integer seperti tidak menempel pada urutan penyisipan sama sekali.
Pertanyaannya adalah, untuk metode apa pesanan ini dijamin dalam spesifikasi ES2015?
Metode berikut menjamin urutan yang ditunjukkan:
- Object.assign
- Object.defineProperties
- Object.getOwnPropertyNames
- Object.getOwnPropertySymbols
- Reflect.ownKeys
Metode / loop berikut tidak menjamin pesanan sama sekali:
- Objek.kunci
- untuk..di
- JSON.parse
- JSON.stringify
Kesimpulan: Bahkan dalam ES2015 Anda tidak harus bergantung pada urutan properti objek normal di Javascript. Itu rentan terhadap kesalahan. Gunakan Map
sebagai gantinya.