>  Q&A  >  본문

JavaScript는 객체 속성의 순서를 보장합니까?

<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粉604848588P粉604848588427일 전459

모든 응답(2)나는 대답할 것이다

  • P粉894008490

    P粉8940084902023-08-21 15:38:37

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

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

    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 버그 보고. 이 버그 보고서의 (다소 주관적인) 의견 중 하나에 따르면:

    회신하다
    0
  • P粉574695215

    P粉5746952152023-08-21 10:41:13

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

    으아악

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

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

    회신하다
    0
  • 취소회신하다