[英]Complex objects in javascript
我在摆弄一个名为bcoin
的节点库。 运行以下代码:
chain.on('block', function(block) {
console.log('Connected block to blockchain:');
block.txs.forEach(function(t) {
t.inputs.forEach(function(i) {
console.log(typeof i, i);
console.log(JSON.stringify(i));
});
});
});
这是我得到的答复:
Connected block to blockchain:
object { type: 'coinbase',
subtype: null,
address: null,
script: <Script: 486604799 676>,
witness: <Witness: >,
redeem: null,
sequence: 4294967295,
prevout: <Outpoint: 0000000000000000000000000000000000000000000000000000000000000000/4294967295>,
coin: null }
{"prevout":{"hash":"0000000000000000000000000000000000000000000000000000000000000000","index":4294967295},"script":"04ffff001d02a402","witness":"00","sequence":4294967295,"address":null}
请注意,即使在打印i
时显示了例如属性type
,当我们对对象进行JSON.stringify
时,该属性也不存在。 如果我尝试console.log(i.type)
我会得到undefined
。
那怎么可能? 调试对象发生了什么的好方法是什么?
JSON.stringify
将仅包含不是函数的可枚举属性。
因此,如果您定义一个属性并将其设置为不可枚举,则它不会成为JSON字符串的一部分。
var obj = { a: 'test' }; // Non-enumerable property Object.defineProperty(obj, 'type', { enumerable: false, value: 'Test' }); // Get property Object.defineProperty(obj, 'type2', { get: function(){ return 'Test 2' } }); console.log(JSON.stringify(obj), obj); console.log(obj.type, obj.type2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.