728x90
반응형
질문 : JavaScript는 객체 속성 순서를 보장합니까?
다음과 같은 객체를 생성하면 :
var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
결과 객체는 항상 다음과 같이 보일까요?
{ prop1 : "Foo", prop2 : "Bar" }
즉, 속성은 내가 추가 한 순서와 동일합니까?
답변
객체의 반복 순서는 ES2015 이후 특정 규칙 집합을 따르지만 (항상) 삽입 순서를 따르지는 않습니다 . 간단히 말해서, 반복 순서는 문자열 키의 삽입 순서와 숫자 형 키의 오름차순의 조합입니다.
// key order: 1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }
배열이나 Map
객체를 사용하는 것이이를 달성하는 더 좋은 방법이 될 수 있습니다. Map
Object
와 몇 가지 유사점을 공유하며 예외없이 삽입 순서대로 키가 반복되도록 보장합니다.
Map의 키는 정렬되지만 객체에 추가 된 키는 정렬되지 않습니다. 따라서 반복 할 때 Map 객체는 삽입 순서대로 키를 반환합니다. (ECMAScript 2015 사양에서 객체는 문자열 및 기호 키에 대한 생성 순서를 유지하므로 문자열 키만 사용하여 객체를 순회하면 삽입 순서대로 키가 생성됩니다)
참고로 ES2015 이전에는 객체의 속성 순서가 전혀 보장되지 않았습니다. ECMAScript Third Edition (pdf) 의 객체 정의 :
4.3.3 개체
개체는 개체 유형의 구성원입니다. 이는 각각 원시 값, 객체 또는 함수를 포함 하는 순서없는 속성 모음입니다. 객체의 속성에 저장된 함수를 메서드라고합니다.
출처 : https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order
728x90
반응형
'프로그래밍 언어 > HTML,CSS,JS' 카테고리의 다른 글
jQuery에서 JSON으로 직렬화 (0) | 2021.10.12 |
---|---|
setTimeout 과 setInterval의 차이 (0) | 2021.10.07 |
다중 코어 시스템의 Node.js (0) | 2021.10.06 |
JavaScript에서 여러 줄 문자열 만들기 (0) | 2021.10.06 |
AngularJS ngClass 조건부 (0) | 2021.10.05 |