2017-11-21 17 views
-1

내가 브라우저에서이를 열면 : 나는 코멘트에 작성한 것을JSON.stringify가 출력 JSON 객체에 배열을 포함하지 않는 이유는 무엇입니까?

는 것이다
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Testing stringify</title> 
    </head> 
    <body> 
     <script> 
      var obj = {}; 
      var arr = []; 
      arr.push(1,2); 
      alert(arr); // 1,2 
      Object.defineProperty(obj, "name", { 
       value:arr 
      }); 
      alert(obj.name); // 1,2 
      alert(JSON.stringify(obj)); // {} 
     </script> 
    </body> 
</html> 

출력. arr이 출력 JSON 문자열에 포함되지 않은 이유를 모르겠습니다. 설명자 객체의 다른 속성을 defineProperty()에 정의해야합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2

작성한 속성은 열거 할 수 없습니다. 설명자에 enumerable: true을 설정하면 제대로 작동합니다.

var obj = {}; 
 
var arr = []; 
 
arr.push(1, 2); 
 
console.log(arr); // 1,2 
 
Object.defineProperty(obj, "name", { 
 
    value: arr, 
 
    enumerable: true, 
 
}); 
 
console.log(obj.name); // 1,2 
 
console.log(JSON.stringify(obj)); // {}

+0

감사합니다. 왜 속성을 열거 할 필요가 있습니까? – Sahand

+1

@Sandi : 기본적으로 'stringify' 메서드는 속성을 찾아서 JSON 결과에 추가해야하기 때문에 속성을 열거해야하기 때문입니다. 나는 그들이 속성을 쉽게 제외 할 수 있도록하기 위해이 디자인 결정을 내렸음에 틀림 없다고 상상한다. –