You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript数组为何同时含普通元素与键值对?ethers.getLogs结果解析

为什么ethers.getLogs()返回的结果同时包含数组元素和对象属性?

这是JavaScript特性结合ethers.js设计逻辑导致的:

  1. 数组本质是特殊对象
    在JavaScript中,Array是Object的子类,因此你可以像给普通对象添加属性一样,给数组挂载自定义键值对,同时保留数组的索引式元素。你看到的结果本质就是一个数组,只是额外添加了命名属性。

  2. ethers.js的双兼容设计
    这个返回值对应智能合约事件的日志数据,ethers.js这么做是为了同时支持两种访问方式:

  • 按数组索引访问:对应事件ABI里参数的定义顺序(比如第0位是userOpHash,第1位是sender),兼容习惯按位置取参的代码;
  • 按命名属性访问:直接通过userOpHash、sender等键名取值,可读性更强,无需记忆参数顺序。

你自己也能在JS里造出类似结构:

const logArr = ['0xd2ab...', '0xcd63...'];
logArr.userOpHash = '0xd2ab...';
logArr.sender = '0xcd63...';
console.log(logArr);
// 输出会呈现数组元素+自定义属性的混合结构

这种设计是ethers.js团队为兼顾灵活性与可读性做出的权衡,同时满足不同场景的代码需求。

内容的提问来源于stack exchange,提问作者Bob Kalobsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:16:19