Почему JS всегда возвращает 'Cannot read property' push 'of undefined? - PullRequest
0 голосов
/ 13 октября 2019

Окей, я видел решение этой проблемы, но мне не ясно, почему это не работает для меня? Я использую 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 return 1;

1 Ответ

2 голосов
/ 13 октября 2019

Несмотря на то, что условия не так ясны (в частности, нет понятия, что такое 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]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...