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

JS获取函数参数数量用Object.keys(arguments).length还是arguments.length

关于JS中arguments.length和Object.keys(arguments).length的差异说明

核心结论

绝大多数场景下直接使用arguments.length获取函数实参数量是更规范、性能更优、结果更准确的选择,使用Object.keys(arguments).length属于多余写法,甚至会引入非预期问题,没有任何性能或安全性层面的理由推荐后者。


具体差异说明

  • 原生设计定位区别
    arguments是函数执行时自动生成的类数组内置对象,其自带的length属性是ECMAScript标准明确规定的、专门用于返回当前函数接收的实参总个数的属性,不需要额外遍历计算,性能开销极低。
    而Object.keys(arguments).length需要先遍历arguments对象所有可枚举的自有属性、生成键名数组后再取长度,执行开销远高于直接读原生属性。
  • 结果一致性的坑点
    Object.keys会统计所有可枚举的自有属性,只要出现以下两种非常规操作,得到的结果就不是真实的实参数量:
    • 人为给arguments添加非数字索引的自定义属性(比如arguments.customTag = 'test'),这类自定义属性会被计入Object.keys的长度统计,而arguments.length不会受影响
    • 人为删除arguments的某个索引属性(比如delete arguments[1]),被删除的索引不会被计入Object.keys的长度统计,但arguments.length不会跟随修改,仍然返回原始实参数量

补充注意事项

箭头函数内部不存在独立的arguments对象,两种写法都无法生效,如需获取箭头函数的参数列表,推荐使用剩余参数语法const fn = (...args) => { console.log(args.length) }。

内容的提问来源于stack exchange,提问作者Oron Werner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 11:27:02