JavaScript는 객체 속성의 순서를 보장합니까?
P粉287254588
P粉287254588 2023-08-17 17:04:41
0
2
474
<p>다음과 같은 개체를 만들면:</p> <pre class="brush:php;toolbar:false;">var obj = {}; obj.prop1 = "푸"; obj.prop2 = "바";</pre> <p>결과 개체가 항상 이렇게 보이나요? </p> <pre class="brush:php;toolbar:false;">{ prop1 : "Foo", prop2 : "Bar" }</pre> <p>즉, 속성이 추가한 순서와 동일합니까? </p>
P粉287254588
P粉287254588

모든 응답(2)
P粉186897465

예(항상 삽입 순서대로 진행되는 것은 아닙니다).

대부분의 브라우저는 다음 순서로 개체 속성을 반복합니다.

  1. 오름차순의 양수 정수 키(및 "1"과 같이 정수로 구문 분석하는 문자열)
  2. 삽입 순서의 문자열 키(ES2015는 이를 보장하며 모든 브라우저는 이를 존중합니다)
  3. 삽입 순서의 기호 이름(ES2015는 이를 보장하며 모든 브라우저는 이를 존중합니다)

일부 이전 브라우저에서는 카테고리 1과 카테고리 2를 병합하여 모든 키를 삽입 순서대로 반복합니다. 키가 정수로 구문 분석될 가능성이 있는 경우 특정 반복 순서에 의존하지 않는 것이 가장 좋습니다.

현재 언어 사양(ES2015 이후) 삽입 순서는 유지되지만 양의 정수(예: "7" 또는 "99")로 확인되는 키의 경우 브라우저마다 다르게 동작합니다. 예를 들어 Chrome/V8은 키가 숫자로 구문 분석될 때 삽입 순서를 따르지 않습니다.

이전 언어 사양(ES2015 이전): 반복 순서는 기술적으로 정의되지 않았지만 모든 주요 브라우저는 ES2015 동작을 준수합니다.

ES2015의 동작은 언어 사양이 기존 동작에 의해 주도되는 좋은 예이지 그 반대가 아니라는 점에 유의하세요. 이러한 이전 버전과의 호환성 사고방식에 대해 더 자세히 알아보려면 Chrome의 반복 순서 동작 디자인 결정에 대한 자세한 내용인 http://code.google.com/p/v8/issues/detail?id=164을 참조하세요. Chrome 버그 보고. 이 버그 보고서의 한 (다소 주관적인) 의견에 따르면:

P粉478445671

ES2015부터 객체의 반복 순서는 특정 규칙을 따르지만 항상 삽입 순서를 따르지는 않습니다. 간단히 말해서, 반복 순서는 문자열 키의 삽입 순서와 숫자형 키의 오름차순의 조합입니다.

으아악

이것은 배열이나 Map 개체Map对象可以更好地实现这一点。 MapObject를 사용하여 더 잘 달성할 수 있습니다. MapObject와 몇 가지 유사점이 있으며 는 예외 없이 삽입 순서대로 키 반복 을 보장합니다.

ES2015 이전에는 객체의 속성 순서가 전혀 보장되지 않았습니다. ECMAScript 3rd Edition(pdf)의 객체 정의 :

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!