node.js
içinde bson
(ikili JSON) modülünü yüklemeye çalışıyordum. API dokümanları açık değildi, bu yüzden objelerin bana yardım edeceğini düşünüyordum. Denetimin sonuçları şaşırtıcıydı.% j belirteci, console.log bazı özelliklerini hariç
Sonunda, "yalan" olan %j
kullanıyor olmama neden olduğunu öğrendim - bir nesnenin tüm sözlük anahtarlarını basmıyor! (Ben bir nokta ile başvurulan şeyler için "öznitelikleri" için Python terminolojisini ve parantez içinde atıfta bulunulan şeyler için "sözlük tuşları" kullanıyorum çünkü JS'de bu şeylerin isimlerini bilmiyorum.)
İşte bir örnek: burada
var bson = require("bson");
console.log("bson as %%j: %j", bson);
console.log("bson as console.log: ", bson);
ve çıkış var: x.key
bu nitelikler ve sözlük tuşları JS "aynı şey" demektir ki x["key"]
aynı olduğundan
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,
...
diye düşündüm. BSON.BSONPure
'un {}
olduğunu, ancak BSON.BSONPure.BSON
ve BSON.BSONPure["BSON"]
bir function
nesnesi olduğunu deneytikten sonra buldum!
Bu, "%j"
'un her neyse, bazı tuşların dışında kalması gerektiğine inanmamı sağlar. Hangi tuşların hariç tutulacağına nasıl karar verilir? Bunu neden yapsın ki? JS bazen kafa karıştırıcı bir dildir!
İlgili Github bilet: node.js
source yılında Aşağı https://github.com/mongodb/js-bson/issues/97
Her iki şey de aynıdır ("x.key" ve "x [" anahtar "]' da tamamen eşdeğerdir) ve bunlara * properties * denir. – Bergi