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

为什么JavaScript数组内含对象却打印为空且length为0

核心原因

  • JavaScript中的Array属于特殊的对象类型,支持挂载任意自定义属性,你给detail添加的cat1、cat2属于字符串键的自定义属性,不属于数组的标准索引元素:
    • 数组的length仅统计键为非负整数的元素数量,自定义字符串属性不会被计入,所以detail.length输出为0
    • 控制台打印数组时默认仅展示标准索引元素,自定义属性默认折叠不展示,所以打印结果显示为Array [],点击展开数组对象就能看到你挂载的cat1~cat4属性
  • 你的代码中detail.cat2.push(newEntry)是给detail的cat2属性(本身是数组)添加元素,没有给detail数组本身新增任何标准索引元素,自然不会改变detail的length,也不会出现在detail的打印结果中。

优化建议

如果你的需求是存储多个分类的数组,不需要用数组作为容器,直接用普通对象即可:

// 用普通对象作为分类容器更符合语义
const detail = {
  cat1: [],
  cat2: [],
  cat3: [],
  cat4: []
};
const newEntry = {"cod":"01","dt":"2021-10-02 09:07:21.205-07:00"};
detail.cat2.push(newEntry);

内容的提问来源于stack exchange,提问作者Rodrigo Camargo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:01