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