Stavo recentemente cercando di caricare il modulo bson
(binario JSON) in node.js
. I documenti API non erano chiari, quindi ho pensato che l'ispezione degli oggetti mi avrebbe aiutato. I risultati dell'ispezione erano sconcertanti.% j specificatore in console.log esclude alcune proprietà
Finalmente ho scoperto che era perché stavo usando %j
che "mente" - non stampa tutte le chiavi del dizionario di un oggetto! (Sto usando la terminologia Python per "attributi" come cose a cui si fa riferimento con un punto, e "chiavi del dizionario" per cose a cui si fa riferimento con parentesi, perché non conosco i nomi propri di queste cose in JS.)
Qui è un esempio:
var bson = require("bson");
console.log("bson as %%j: %j", bson);
console.log("bson as console.log: ", bson);
ed ecco l'output:
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,
...
ho pensato fin x.key
è lo stesso x["key"]
, che questo significa attributi e le chiavi del dizionario sono "la stessa cosa" in JS. Ho trovato dopo aver sperimentato che BSON.BSONPure
è {}
, tuttavia BSON.BSONPure.BSON
e BSON.BSONPure["BSON"]
sono un oggetto function
!
Questo mi porta a credere che qualunque cosa sia "%j"
, deve in qualche modo escludere alcune chiavi. Come decide quali chiavi escludere? Perché dovrebbe farlo? JS è un linguaggio davvero confusionario a volte!
biglietto Github correlati: https://github.com/mongodb/js-bson/issues/97
Entrambe le cose sono le stesse (come si dice, 'x.key' e' x ["chiave"] 'sono totalmente equivalenti) e sono chiamate * proprietà *. – Bergi