pic*_*cer 12 javascript properties node.js console.log
我最近尝试加载bson(二进制JSON)模块node.js.API文档不清楚,所以我认为检查对象会对我有所帮助.检查结果令人费解.
最后我发现这是因为我使用的%j是"谎言" - 它不会打印所有对象的字典键!(我使用Python术语表示"属性"作为用点引用的东西,使用"字典键"表示用括号引用的东西,因为我不知道JS中这些东西的正确名称.)
这是一个例子:
var bson = require("bson");
console.log("bson as %%j: %j", bson);
console.log("bson as console.log: ", bson);
Run Code Online (Sandbox Code Playgroud)
这是输出:
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,
...
Run Code Online (Sandbox Code Playgroud)
我认为既然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
Per*_* P. 24
在node.js 源代码中,%j占位符导致JSON.stringify()对传递的参数的调用.
问题是,在传递bson变量时,您没有传递有效JSON对象.您正在传递一个node.js模块,该模块除其他外还有导出的函数.
那么,当JSON.stringify()遇到一个函数时会发生什么?
如果未定义,则在转换期间遇到函数或符号,或者省略(当在对象中找到它)或者删除为null(当它在数组中找到时).(MDN)
因此,您所看到的行为是完全可以预期的,您正在尝试记录某些JSON无效的行为JSON.
> JSON.stringify({name: "Bob"})
> "{"name":"Bob"}"
> JSON.stringify({func: function(){}})
> "{}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6316 次 |
| 最近记录: |