프로그래밍 언어/HTML,CSS,JS

JavaScript의 배열 객체 속성 순서에 대해서

Rateye 2021. 10. 6. 10:56
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
반응형