Normal Nesnelerdeki özellik sırası Javascript'te karmaşık bir konudur.
ES5'te açıkça bir emir belirtilmemiş olmakla birlikte, ES2015'in bazı durumlarda bir emri vardır. Verilen aşağıdaki nesnedir:
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},
});
Bu, aşağıdaki sıra ile sonuçlanır (bazı durumlarda):
Object {
0: 0,
1: "1",
2: "2",
b: "b",
a: "a",
m: function() {},
Symbol(): "sym"
}
- artan sırada tamsayı benzeri tuşlar
- ekleme sırasında normal anahtarlar
- Kampanya siparişindeki simgeler
Bu nedenle, ekleme sırasını değiştirebilecek üç örnek vardır (örnekte olduğu gibi). Tamsayı benzeri tuşlar ekleme sırasına hiç uymaz.
Soru, bu siparişin ES2015 spesifikasyonunda hangi yöntemler için garanti edildiği?
Aşağıdaki yöntemler gösterilen sırayı garanti eder:
- Object.assign
- Object.defineProperties
- Object.getOwnPropertyNames
- Object.getOwnPropertySymbols
- Reflect.ownKeys
Aşağıdaki yöntemler / döngüler hiçbir sipariş garantisi vermez:
- Object.keys
- for..in
- JSON.parse
- JSON.stringify
Sonuç: ES2015'te bile Javascript'teki normal nesnelerin özellik sırasına güvenmemelisiniz. Hatalara yatkındır. Map
Bunun yerine kullanın .