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

这怎么可能? 什么是debugging对象的好方法?

JSON.stringify将只包含不是函数的枚举属性。

所以如果你定义一个属性并设置为不可枚举的,它将不会是JSONstring的一部分。

 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)