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

JavaScript中向对象属性数组push元素报错的解决咨询

问题解决办法

错误原因分析

  1. 第一段代码的核心问题:
    当目标键不存在时,你直接将data.videoId赋值给了watchObject[data.room],导致该键对应的值是单个值(如字符串、数字),而非数组。后续再对该键调用push方法时,由于单个值没有数组的push方法,就会抛出TypeError: watchObject[data.room].push is not a function。

  2. 第二段代码的额外问题:
    使用watchObject.tempRoom是错误的语法——点语法只能访问固定字面量的属性名,若要通过变量tempRoom访问对应键,必须使用方括号watchObject[tempRoom]。原写法会去查找名为tempRoom的属性,该属性不存在则返回undefined,调用push自然会报TypeError: Cannot read property 'push' of undefined。

正确实现代码

基础if-else版本

var watchObject = {};
// 假设data.room和data.videoId已在别处定义

if (data.room in watchObject) {
    watchObject[data.room].push(data.videoId);
} else {
    // 关键:新键对应的值要初始化为包含videoId的数组
    watchObject[data.room] = [data.videoId];
}

简洁版(逻辑短路初始化)

可以省略if-else判断,直接用逻辑短路确保数组存在后再push:

var watchObject = {};

// 若键不存在则初始化为空数组,存在则保留原数组
watchObject[data.room] = watchObject[data.room] || [];
watchObject[data.room].push(data.videoId);

内容的提问来源于stack exchange,提问作者Ethan Gordon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:40