[JavaScript] JSON.stringify가 빈 배열을 반환하는 경우 (JSON.stringify returns an empty array)
JavaScript 2015. 7. 23. 22:34object에 이것저것 property를 실컷 세팅해놓고 JSON.stringify() 함수에 담갔다 뺐더니 빈 배열을 표시하는 문자열만 반환되는 허무한 경우가 있었다.
// 최초 선언부분은 아직 비밀이다..;
arr['name'] = '백충덕';
arr['age'] = 100;
console.log(JSON.stringify(arr));
// 콘솔에 찍힌 값은 "[]"
원인은 arr 변수가 object가 아니라 array로 선언되었던 것이었다.
var arr = []; // 혹은 new Array();
arr['name'] = '백충덕';
arr['age'] = 100;
console.log(JSON.stringify(arr));
// 콘솔에 찍힌 값은 "[]"
잠시 정신이 나간 상태에서 신내림을 받고 코딩하다 일어날 수 있는 실수인데,
array의 경우 일반적으로는 object처럼 named property를 이용해서 값을 할당하거나 꺼내 쓰거나 할 수 있지만,
JSON.stringify()의 경우 array의 named property(non-enumerable property)는 무시하는 방식으로 동작한다는게 문제다.
쉽게 이해하기 위해 부연하자면,
array에는 length 같은 built-in property가 있지만 console.log() 함수로 출력해보면 length는 출력되지 않는 것과 동일하다고 보면 된다.
array라도 named property가 아니라 정상적인 index를 할당받은 값은 JSON.stringify를 이용해 문자열로 변환이 가능하다.
// 1. 위의 array 문제의 경우 선언할 때 아래처럼 object로 선언하면 정상동작함.
var arr = {};
arr['name'] = '백충덕';
arr['age'] = 100;
console.log(JSON.stringify(arr));
// 콘솔에 찍히는 값은 {"name":"백충덕","age":100}
// 2. array의 경우에도 named property가 아니라 정상적으로 할당된 index를 가진 값은 JSON.stringify()가 정상동작함.
var arr = [];
arr[0] = '백충덕';
arr.push(100);
arr['named_property'] = '이건 안나온다';
console.log(JSON.stringify(arr));
// 콘솔에 찍히는 값은 ["백충덕",100]
[참고]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
'JavaScript' 카테고리의 다른 글
[JavaScript] 숫자 3자리마다 쉼표 찍기 (=number_format) (0) | 2016.05.23 |
---|---|
[JavaScript] canvas 이미지 다운로드 (0) | 2016.03.24 |
[jQuery] element의 scrollbar가 보이고 있는지 여부 체크 (0) | 2015.06.10 |
[JavaScript] 배열 숫자정렬 (array numeric sort) (0) | 2015.06.02 |
[JavaScript] IE8 이하에서 element의 text 가져올 때 앞의 공백문자가 없어지는 현상 (get text returns without leading white spaces) (0) | 2014.10.18 |