JavaScript数组:可以同时拥有键和值吗?

qq24tv8q  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(191)

我在javascript中的任意事务上使用了一个ethers.providers.getLogs()函数。我得到了以下结果作为参数之一。
这个数组中似乎有键对值(用括号[]表示),这没有意义。这让我觉得这是一个物体。但也不可能是这样,因为存在没有配对的奇异密钥。
有人能解释一下这是怎么回事吗?

[
  '0xd2ab1089822171b728a5694b79acf292f6b59ff8c548d2a2e71f6c5ff7025f0f',
  '0xcd63cB2374e49f88083d79D5f7891be5734cdc68',
  '0x0000000000000000000000000000000000000000',
  BigNumber { _hex: '0x38', _isBigNumber: true },
  true,
  BigNumber { _hex: '0xc817c38c6ddc', _isBigNumber: true },
  BigNumber { _hex: '0x023c74', _isBigNumber: true },
  userOpHash: '0xd2ab1089822171b728a5694b79acf292f6b59ff8c548d2a2e71f6c5ff7025f0f',
  sender: '0xcd63cB2374e49f88083d79D5f7891be5734cdc68',
  paymaster: '0x0000000000000000000000000000000000000000',
  nonce: BigNumber { _hex: '0x38', _isBigNumber: true },
  success: true,
  actualGasCost: BigNumber { _hex: '0xc817c38c6ddc', _isBigNumber: true },
  actualGasUsed: BigNumber { _hex: '0x023c74', _isBigNumber: true }
]
ffscu2ro

ffscu2ro1#

这是一个数组的文本表示,它也有非整数键属性,例如Node.js的console.log(默认格式为%O)/util.inspect
正如@ThisGuy在评论中指出的那样,
数据似乎是两次。一次作为原始的未标记数据。然后是第二组,使用键和值
您正在使用的库的创建者可能是为了向后兼容而这样做的,例如。如果函数最初返回一个数组,但后来决定命名属性是更好的选择。

class BigNumber {
  constructor(hex) {
    this._hex = hex;
    this._isBigNumber = true;
  }
}

const exact = [
  '0xd2ab1089822171b728a5694b79acf292f6b59ff8c548d2a2e71f6c5ff7025f0f',
  '0xcd63cB2374e49f88083d79D5f7891be5734cdc68',
  '0x0000000000000000000000000000000000000000',
  new BigNumber('0x38'),
  true,
  new BigNumber('0xc817c38c6ddc'),
  new BigNumber('0x023c74'),
];

Object.assign(exact, {
  userOpHash: '0xd2ab1089822171b728a5694b79acf292f6b59ff8c548d2a2e71f6c5ff7025f0f',
  sender: '0xcd63cB2374e49f88083d79D5f7891be5734cdc68',
  paymaster: '0x0000000000000000000000000000000000000000',
  nonce: new BigNumber('0x38'),
  success: true,
  actualGasCost: new BigNumber('0xc817c38c6ddc'),
  actualGasUsed: new BigNumber('0x023c74'),
});

document.getElementById('formatted').textContent = util.inspect(exact);
<script src="https://unpkg.com/node-inspect-extracted/dist/inspect.js"></script>
<pre id="formatted"></pre>

相关问题