2017-11-21 10 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結果に追加するためにプロパティを列挙する必要があるためです。私は、彼らが簡単にプロパティを除外できるようにするために、この設計決定をしたに違いないと思います。 –

関連する問題