Javascript: квадратные скобки после вызова функции
Я потратил около 15 минут на отладку фрагмента кода Javascript и обнаружил, что проблема в том, что я написал
matches.push[[-1]];
вместо
matches.push([[-1]]);
как я и предполагал, где matches
это массив. Может кто-нибудь объяснить мне, почему Javascript не выдавал синтаксическую ошибку в первом и каково ее значение?
3 ответа
Зачем
matches.push
это Function Object
и вы можете получить доступ к свойствам и методам объекта через точечную запись или скобку. В основном вы просите что-то, чего нет в push
Function 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
,