찾다

 >  Q&A  >  본문

JavaScript에서는 객체 속성의 순서가 보장되나요?

다음과 같은 개체를 만들 경우:

으아악

생성된 개체 는 항상 이렇게 보일까요?

으아악

즉, 속성을 추가한 순서와 동일합니까?

P粉663883862P粉663883862410일 전481

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

  • P粉006977956

    P粉0069779562023-10-13 16:31:53

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

    대부분의 브라우저는 다음과 같이 객체 속성을 반복합니다.

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

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

    현재 언어 사양(ES2015 기준) 양의 정수(예: "7" 또는 "99")로 해석되는 키를 제외하고 삽입 순서가 유지됩니다. 이 경우 브라우저는 다르게 동작합니다. 예를 들어 Chrome/V8은 키가 숫자로 해석될 때 삽입 순서를 고려하지 않습니다.

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

    ES2015 동작은 기존 동작에 의해 구동되는 언어 사양의 좋은 예이며 그 반대가 아닙니다. 이전 버전과의 호환성 사고방식을 더 깊이 이해하려면 Chrome의 반복 순서 디자인 결정 뒤에 있는 동작을 자세히 설명하는 Chrome 버그인 http://code.google.com/p/v8/issues/detail?id=164를 참조하세요. 버그 보고서에 대한 (다소 독선적인) 의견 중 하나에 따르면:

    회신하다
    0
  • P粉541565322

    P粉5415653222023-10-13 14:55:26

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

    으아악

    배열이나 Map< /code> 객체Map< /code> object 可能是实现此目的的更好方法。 MapObject를 사용하는 것이 이를 달성하는 더 좋은 방법일 수 있습니다. MapObject 는 예외 없이 삽입 순서대로 키 반복 을 보장합니다.

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

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