일반 객체의 속성 순서는 Javascript의 복잡한 주제입니다.
ES5에서는 명시 적으로 주문이 지정되어 있지 않지만 ES2015는 특정 주문이 있습니다. 다음과 같은 객체가 주어진다 :
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},
});
결과는 다음과 같습니다 (특정 경우).
Object {
0: 0,
1: "1",
2: "2",
b: "b",
a: "a",
m: function() {},
Symbol(): "sym"
}
- 정수형 키 (오름차순)
- 삽입 순서의 일반 키
- 삽입 순서의 기호
따라서 삽입 순서를 변경할 수있는 세 개의 세그먼트가 있습니다 (예제에서와 같이). 그리고 정수와 같은 키는 삽입 순서에 전혀 영향을 미치지 않습니다.
문제는 ES2015 사양 에서이 순서가 보장되는 방법은 무엇입니까?
다음 방법은 표시된 순서를 보장합니다.
- Object.assign
- Object.defineProperties
- Object.getOwnPropertyNames
- Object.getOwnPropertySymbols
- Ref.ownKeys
다음 방법 / 루프는 전혀 순서를 보장하지 않습니다.
- Object.keys
- for..in
- JSON.parse
- JSON.stringify
결론 : ES2015에서도 Javascript에서 일반 객체의 속성 순서에 의존해서는 안됩니다. 오류가 발생하기 쉽습니다. Map
대신 사용하십시오 .