为什么JS总是返回“无法读取未定义的属性“推””?

时间:2019-10-13 14:29:29

标签: javascript sockets socket.io

Okey,我看到了解决此问题的方法,但是我不清楚为什么它对我不起作用? 我使用socket.io

//这是房间

var rooms = {
            "1": [],
            "2": [],
            "3": [],
            "4": [],
            "5": []
};

这是听众

socket.on('joinRoom', function (data) {

}

为什么

rooms[1].push(1); // work?

为什么

rooms["1"].push(1); // work?

为什么?

rooms[data.room].push(1); // not work?

为什么?

rooms["" + data.room].push(1) not work?    

为什么?

rooms[data.room] = [];
rooms[data.room] = 1; // work?

data.room返回1;

1 个答案:

答案 0 :(得分:2)

即使条件不清楚(特别是不知道data是什么),也可能导致以下情况的唯一原因:

rooms[data.room] = [];
rooms[data.room] = 1;

与此同时:

rooms[data.room].push(1);

data.room返回的内容不是rooms的键。

尝试执行此操作rooms[data.room] = 1;,然后console.log(rooms);可能会找到6个键而不是5个键。

顺便说一句,当您设置密钥/访问其值时,无需将密钥转换为字符串。它会自动转换。甚至可以将对象转换为字符串[object Object]