Javascript: квадратные скобки после вызова функции

Я потратил около 15 минут на отладку фрагмента кода Javascript и обнаружил, что проблема в том, что я написал

matches.push[[-1]];

вместо

matches.push([[-1]]);

как я и предполагал, где matches это массив. Может кто-нибудь объяснить мне, почему Javascript не выдавал синтаксическую ошибку в первом и каково ее значение?

3 ответа

Зачем

matches.push это Function Object и вы можете получить доступ к свойствам и методам объекта через точечную запись или скобку. В основном вы просите что-то, чего нет в pushFunction Object так что это дает undefined,

введите описание изображения здесь

Заметка

Если вы добавили что-то с ключом [-1] как в matches[[-1]] = "something" это также будет допустимо, поэтому синтаксис действителен, просто не то, что вы хотели сделать.

Это просто свойство собственности:

var matches = [];
matches.push[1] = 'bla'
document.write(matches.push[1]);

В основном вы делаете следующее:

matches.push[[-1]]; 

разрешается в (одиночное число в скобках становится строкой), и хотя метод доступа к объектам является строкой, вы получаете

matches.push['-1']

и это решает

undefined

потому что собственность '-1' не определено

Все в js - это объект, даже функция. Я полагаю, что двигатель просто ссылается (несуществующее) поле на push Функция / объект. Это приводит к undefined,

Другие вопросы по тегам