我最近尝试在bson
中加载node.js
(二进制JSON)模块。 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
为{}
,但BSON.BSONPure.BSON
和BSON.BSONPure["BSON"]
是function
对象!
这让我相信无论"%j"
做什么,都必须以某种方式排除某些键。它如何决定排除哪些键?为什么会这样呢?有时JS是一种非常令人困惑的语言!
相关Github门票:https://github.com/mongodb/js-bson/issues/97