JavaScript ES6에서 객체 속성의 순회 순서
5246 단어 reactwebdevjavascript
JSON
객체 응답을 수신하고 해당 객체를 사용하여 React 구성 요소를 생성하는 코드를 본 적이 있습니까?Object.keys(data).map((entry) => {
<MyComponent key={entry.id} name={entry.name} ... />;
});
😱 여러 번 봤는데 어떤 경우에는 괜찮을 수도 있지만 매우 위험합니다! 특히 해당
<MyComponent />
을 수신/삽입된 순서대로 표시해야 하는 경우.ES6 객체 순회
ES6 이전에는 개체 속성이 순회되는 순서가 지정되지 않았으므로 각 엔진이 적합하다고 판단되는 대로 처리했습니다.
ES6에서는 다음과 같은 몇 가지 방법에 대해 순회 순서가 보장되었습니다.
Object.getOwnPropertyNames()
Reflect.ownKeys()
Object.getOwnPropertySymbols()
그러나 다른 사람은 아닙니다.
Object.keys()
Object.values()
Object.entries()
JSON.stringify()
for .. in
루프아시다시피 가장 인기 있는 방법은 주문을 보장하지 않는 방법입니다 😒
그것을 보장하는 것들은 다음 순서를 지정하는 [[OwnPropertyKeys]] 내부 방법을 따릅니다.
주문하다.
const obj = {
[Symbol('first')]: 'symbol: first'
'5': 'integer: 5',
'foo': 'string: foo',
'01': 'string: 01',
2: 'integer: 2',
};
console.log(Reflect.ownKeys(obj));
// ["2", "5", "foo", "01", Symbol(first) ]
그리고 Object.keys() 와 같은 다른 인기 있는 방법은 어떻습니까?
일부 주요 브라우저의 현재 버전은 이러한 인기 있는 방법에 대해서도 이와 동일한 순서를 구현하지만 - ES6 구현은 이러한 인기 있는 방법에 대한 특정 열거 순서를 정의할 필요가 없으므로 코드에서 계산하지 않는 것이 좋습니다. .
(내 프로젝트 중 하나에서
Object.keys()
를 사용할 때 Safari 13.1.2에서 작동하지 않는 이 주문을 개인적으로 보았습니다 😟)대안은 무엇입니까?
일부 타사 라이브러리를 제외하고 삽입 순서에 따라 반복을 보장하려는 경우 Array 또는 Map이 더 안전한 선택입니다!
희망이 있습니까?
글쎄, 실제로..있다! 😻
ECMA 사양을 변경하고 이
[[OwnPropertyKeys]]
주문 동작을 모든 인기 있는 객체 탐색 방법에 대해 공식화하는 proposal이 있었고 그 제안은 accepted and merged into the main specification 이었습니다!즉, ES2020에서 이러한 인기 있는 방법의 속성 순서는 ECMA 사양에 의해 보장되어 다른 방법과 동일한 결정론적 방식으로 반복됩니다!
결론
JavaScript의 객체 순회 순서는 다른 브라우저 구현으로 인해 항상 까다로웠지만 ES2020은 마침내 모든 인기 있는 순회 방법에 대한 결정적 순서 표준을 제공했습니다.
여전히 이 순서가 작동하지 않을 수 있습니다. 프로젝트에
integer
및 string
키가 혼합된 개체가 포함될 수 있지만 삽입 순서에 따라 순회가 필요할 수 있습니다.객체 순회가 어떻게 작동하는지 아는 것이 좋고, 사용할 수 있는 대안이 있다는 것도 아는 것이 좋습니다 😊
즐거운 코딩! 🚀 🚀 🚀
Reference
이 문제에 관하여(JavaScript ES6에서 객체 속성의 순회 순서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eladtzemach/traversal-order-of-object-properties-in-javascript-es6-5a3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)