спецификатор %j в консоли.журнал исключает некоторые свойства

недавно я пытался загрузить bson (двоичный JSON) модуль в node.js. Документы API были неясны, поэтому я подумал, что проверка объектов поможет мне. Результаты инспекции озадачивали.

наконец я узнал, что это потому, что я использовал %j который "лежит" - он не печатает все ключи словаря объекта! (Я использую терминологию Python для "атрибутов" как вещи, на которые ссылаются точкой, и "ключи словаря" для вещей, на которые ссылаются скобки, потому что я не знаю правильного названия для этих вещей в JS.)

вот пример:

var bson = require("bson");
console.log("bson as %%j: %j", bson);
console.log("bson as console.log: ", bson);

и вот результат:

bson as %j: {"BSONPure":{},"BSONNative":{}}
bson as console.log:  { BSONPure: 
   { Code: [Function: Code],
     Symbol: [Function: Symbol],
     BSON: 
      { [Function: BSON]
        BSON_INT32_MAX: 2147483647,
        BSON_INT32_MIN: -2147483648,
        BSON_INT64_MAX: 9223372036854776000,
        BSON_INT64_MIN: -9223372036854776000,
...

Я думал, что с x.key это то же самое, что x["key"], что это означает, что атрибуты и ключи словаря "одно и то же" в JS. Я обнаружил после экспериментов, что BSON.BSONPure is ,BSON.BSONPure.BSON и BSON.BSONPure["BSON"] - это function "объект"!

это заставляет меня поверить, что что-то "%j" делает, должно быть, как-то исключает некоторые ключи. Как он решает, какие ключи исключить? Зачем он это сделал? JS-действительно запутанный язык иногда!

связанный билет Github:https://github.com/mongodb/js-bson/issues/97

1 ответов


в node.js источник, the %j заполнитель приводит к вызову JSON.stringify() по переданному аргументу.

дело в том, что, проходя мимо вашего bson переменная, вы не передаете допустимое