2009-03-15 1 views
16

는 :자바 스크립트 객체의 필드 순서가 반복 될 때 예측할 수 있습니까? 다음과 같은 코드가 있다면 PHP에서

$map = array(
    "first" => 1, 
    "second" => 2 
); 

$map["third"] = 3; 

foreach($map as $key => $value) { 
    // code 
} 

을 당신은 항목들이 배열에 추가 된 순서대로 나열됩니다 알고있다.

이제 동일한 규칙이 아래의 해당 자바 스크립트에 적용된다고 가정 할 수 있습니까?

map = { 
    "first": 1, 
    "second": 2 
}; 

map["third"] = 3; 

for (key in map) { 
    // code 
} 

이 은의 중복 : Elements order - for (… in …) loop in javascript

+0

[Elements order for - (... in ...) 루프가 자바 스크립트에서 가능합니다] (http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript)) – Borgar

답변

10

대부분의 브라우저는 객체에 추가 된 순서대로 속성을 반복하지만 Javascript 표준에 따르면 순서가 정의되지 않았기 때문에이 동작에 의존해서는 안됩니다. 예를 들어 Google 크롬이 항상 이러한 동작을 나타내는 것은 아니지만 다시 한 번 blog post을 읽었습니다.

주문한 기능이 필요한 경우 개체 또는 숫자 키를 사용할 수있는 새 클래스를 직접 만들어야합니다.

+1

링크를 제공해 주셔서 감사합니다. John이 말한 것은 표준이 아니지만 브라우저 공급 업체가 그대로 적용한다는 것입니다 (Chrome 팀이 "버그"를 수정합니다). –

+1

예. 나는 아직도 당신이 행동에 의지해야한다고 생각하지 않지만. 더 안전하게 행동을 직접 정의 할 수있는 사용자 정의 클래스를 작성하십시오. –

0

아니, 동작 구현에 의존하고 그것을 보장 할 수 없습니다. 주문을 보존해야하는 경우 배열을 사용하십시오.

+1

예 (표준) : "속성을 열거하는 메커니즘 (첫 번째 알고리즘의 5 단계, 두 번째 단계의 6 단계)은 구현에 따라 다르며 열거 순서는 개체에 의해 정의됩니다." 열거 자체는 구현에 따라 다르지만 순서는 객체에 따라 다릅니다. –

+1

@Julian : ECMA-262의 다음 버전 3.1은 모호하지 않습니다. "속성 [...]을 열거하는 메커니즘과 순서가 지정되지 않았습니다." – Christoph

관련 문제