2011-05-16 2 views
6

JavaScript에서 지금 막 픽업 한 것을 놓친 것 같습니다.JSON.stringify() 및 JavaScript 객체

a = []; 
a.name = "test"; 
JSON.stringify(a); 
// which returns value [] 
a = new Object(); 
a.name = "test"; 
JSON.stringify(a); 
// which returns value {"name":"test"} 

차이점은 무엇입니까 :

나는 크롬 콘솔에서이 코드를 시도? 새로운 Object()가 Microsoft JScript 일인 줄 알았습니까? 내가 뭘 놓치고 있니? 어딘가에서 뭔가를 놓쳤을 것입니다. 감사.

+0

그래서 ...? – hvgotcodes

+2

* "새로운 Object()가 Microsoft JScript 일이라고 생각 했습니까?"* 아니요, 전혀 아닙니다. 이것은 표준 자바 스크립트입니다 (JVM과 다른 ECMAScript 구현에서 잘 작동하는 대신'{} '을 사용하십시오). –

답변

20
a = new Object() 

a = [] 

은 동일하지 않다. 그러나,

a = {} 

a = new Object() 

입니다.

+0

확인. 감사. 지금 당장 바보 같은 질문을받는 것 같아. – BuddyJoe

+0

나는 너무 그것을 놓쳤다. –

1

JSON 데이터의 경우 배열에는 숫자 인덱스가 있고 객체에는 키/값 쌍이 있습니다.

a = []; 
a[ 0 ] = "test"; 

JSON.stringify(a); // returns value ["test"] 
1

예 실제로 배열 인 객체를 정의하기 위해 []을 사용하고 있지만, 연결 배열이 아니기 때문에오고있는 언어에 따라 혼동을 줄 수 있습니다.

기본 객체는 키 -> 모든 데이터를지도하고 당신이

a = {}; 
a.name = "test"; 
JSON.stringify(a); 

그것은 작동합니다

을 한 경우 중괄호 {}

인스턴스화된다. , []new Array()에 해당하면 다음 .name 속성을 추가하고있는 - (하지만 지금은 그것을 무시한다.이 때문이 아니라 이상한 재정 문제의 때를 제외하고)

+0

* "...연관 배열이 아니기 때문에 혼란 스러울 수 있습니다. "사실 배열보다 연관성이 높고 숫자가 아닌 키 (속성 이름)가 JavaScript에서 완벽하게 유효하기 때문에 실제로는 더 혼란 스럽습니다. [배열은 정말 배열] (http://blog.niftysnippets.org/2011/01/myth-of-arrays.html).하지만 배열을 JSON으로 변환하면 JSON 배열 표기법이 비 배열을 허용하지 않기 때문에 배열이 삭제됩니다. - 숫자 키 (정당한 이유가 있지만, 소수의 언어 만 지원합니다). –

3

new Object(){}에 해당합니다. JSON은 배열 자체에 임의의 속성 할당을 캡처하지 않는 특별한 방법으로 배열을 문자열 화합니다.

1

배열의 name 속성을 설정하면 직렬화 된 형식 (JSON 문자열 형식)이 적용되지 않습니다. 배열에 항목을 넣지 않습니다. 그렇게하려면 a.push('test')이 필요합니다.

개체는 자바 스크립트의 표준 부분입니다 (예 : MDC docs 참조). 객체를 만드는 일반적인 방법은 {}이지만 new Object()도 사용할 수 있습니다. 당신이 무엇을 기대하고

var a = []; 
a.push('test'); 
JSON.stringify(a); //"["test"]" 

a = {}; 
a.name = 'test'; 
JSON.stringify(a); //"{"name":"test"}"