Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的复杂对象_Javascript_Node.js - Fatal编程技术网

javascript中的复杂对象

javascript中的复杂对象,javascript,node.js,Javascript,Node.js,我正在摆弄一个名为bcoin的node库。运行以下代码: 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.

我正在摆弄一个名为
bcoin
的node库。运行以下代码:

  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:'coinbase',
子类型:null,
地址:空,
脚本:,
证人:,
赎回:无效,
序列号:4294967295,
prevout:,
硬币:空}
{“prevout”:{“hash”:“0000000000000000000000000000000000000000000000000000000000000000000000”,“索引”:4294967295},“脚本”:“04ffff001d02a402”,“见证”:“00”,“序列”:4294967295,“地址”:null}
请注意,即使在打印
i
时显示了属性
type
,但当我们
JSON.stringify
对象时,该属性并不存在。如果我尝试
console.log(I.type)
我会得到
undefined


这怎么可能?调试对象发生了什么的好方法是什么?

JSON.stringify
将只包括非函数的可枚举属性

所以,如果您定义一个属性并将其设置为不可枚举,它将不会是JSON字符串的一部分

var obj={
a:‘测试’
};
//不可枚举属性
Object.defineProperty(obj,'类型'{
可枚举:false,
值:“测试”
});
//取得财产
Object.defineProperty(obj,“类型2”{
get:function(){
返回“测试2”
}
});
log(JSON.stringify(obj),obj);

console.log(obj.type,obj.type2)
有趣。为什么您可以访问
obj.type
,而我无法访问
I.type
?这是一个节点应用程序,因此它不在浏览器中运行。关于对象不同,上面的代码是我正在运行的,不确定它如何可能以我运行它的方式发生变异。虽然这很有趣,但它没有回答问题。@OrWeinberger感谢您的回答。此外,正如我前面所说,
类型
并不是缺少的唯一属性。我的建议是,您应该检查您是否重写了内部函数。这可以在我的图书馆里完成。这是因为,
在JS对象中不是有效值。因此,有一种机制,要么以特殊的方式打印值,要么在stringifyYou中删除值。最内部的函数add:if(i){,这将考虑i是否为null或未定义。我试图理解为什么它是
未定义的
。然后展开逻辑,更加详细,在循环之前测试“t”