спецификатор %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 переменная, вы не передаете допустимое