Почему 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()? Что я делаю неправильно?

1 ответ

Решение

Сделанное вами имущество не перечисляемо. Задавать 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)); // {}

Другие вопросы по тегам