我最近試圖在node.js
中加載bson
(二進制JSON)模塊。 API文檔不清楚,所以我認爲檢查對象會對我有所幫助。檢查結果令人困惑。%console.log中的j說明符排除了一些屬性
最後我發現這是因爲我在使用%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上票:在node.js
sourcehttps://github.com/mongodb/js-bson/issues/97
兩件事情都是一樣的(正如你所說,'x.key'和'x [「key」]'完全等價),它們被稱爲* properties *。 – Bergi 2014-10-08 22:51:40