我正在为一个名为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}
请注意,即使我们打印type
时显示了属性i
,但当我们JSON.stringify
对象时,该属性也不存在。如果我尝试console.log(i.type)
,我会undefined
。
怎么可能?什么是调试对象发生了什么的好方法?
答案 0 :(得分:1)
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)