Gần đây tôi đã cố tải mô-đun bson
(JSON nhị phân) trong node.js
. Các tài liệu API không rõ ràng, vì vậy tôi nghĩ rằng việc kiểm tra các đối tượng sẽ giúp tôi. Kết quả của cuộc kiểm tra đã gây bối rối.% j specifier trong console.log không bao gồm một số thuộc tính
Cuối cùng tôi phát hiện ra là vì tôi đang sử dụng %j
"nằm" - nó không in tất cả các phím từ điển của đối tượng! (Tôi đang sử dụng thuật ngữ Python cho "thuộc tính" như những thứ được tham chiếu bằng dấu chấm và "từ điển" cho những thứ được tham chiếu bằng dấu ngoặc đơn, vì tôi không biết tên riêng cho những thứ này trong JS.)
Đây là một ví dụ:
var bson = require("bson");
console.log("bson as %%j: %j", bson);
console.log("bson as console.log: ", bson);
và đây là kết quả:
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,
...
tôi nghĩ kể từ x.key
cũng giống như x["key"]
, mà điều này có nghĩa các thuộc tính và các phím từ điển có "điều tương tự" trong JS. Tôi tìm thấy sau khi thử nghiệm rằng BSON.BSONPure
là {}
, tuy nhiên BSON.BSONPure.BSON
và BSON.BSONPure["BSON"]
là đối tượng function
!
Điều này khiến tôi tin rằng bất cứ điều gì "%j"
thực hiện, bằng cách nào đó phải loại trừ một số khóa. Làm cách nào để quyết định loại khóa nào cần loại trừ? Tại sao nó thậm chí sẽ làm điều đó? JS đôi khi là một ngôn ngữ khó hiểu!
liên quan Github vé: https://github.com/mongodb/js-bson/issues/97
Cả hai thứ đều giống nhau (như bạn nói, 'x.key' và' x ["key"] 'là hoàn toàn tương đương) và chúng được gọi là * thuộc tính *. – Bergi