MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Доступ к свойствам объекта представляют точечная и скобочная нотации.

Синтаксис

object.property
object["property"]

Описание

Можно подумать, что объект - ассоциативный массив (a.k.a. map, dictionary, hash, lookup table). Ключи в этом массиве - имена свойств объекта. Обычно, когда речь идет о свойствах объекта, различают свойства и методы. Тем не менее, различие свойства/метода это не более чем условность. Метод - просто свойство, которое можно, например, вызвать, если он имеет ссылку на экземпляр функции в качестве значения.

Есть два способа доступа к свойствам: точечная и скобочная нотации.

Точечная нотация

get = object.property;
object.property = set;

В этом коде, property должно быть валидным JS индетификатором, т.е. последовательности букв и цифр, а также включающая нижнее подчеркивание ("_") и знак доллара ("$"), но не может начинаться с цифры. К примеру object.$1 валидно, в то время как object.1 нет.

document.createElement('pre');

Здесь метод "createElement" возвращается из document и вызывается.

Скобочная нотация

get = object[property_name];
object[property_name] = set;

property_name - строка. Строка не обязательно может быть правильным индентификатором; может иметь любое значение,  например "1foo", "!bar!", или даже " " (пробел).

document['createElement']('pre');

Это делает тоже, что и предыдущий пример

Имена свойств

Имена свойств могут быть строками. Это значит, что нестроковые объекты могут быть использованы как ключи в объекте. Любой нестроковой объект, включая числа, приводится к строке через метод toString.

var object = {};
object['1'] = 'value';
console.log(object[1]);

 Это выводит "value", а 1 приводится к '1'.

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
console.log(object[bar]);

Также выводит "value", поскольку foo и bar конвертируются в строку. В SpiderMonkey JavaScript движке эта строка будет "['object Object']".

Метод связывания

Метод не связан с объектом его содержащим. В частности, this незафиксированный метод, т.е., он не обязательно относится к объекту, содержащему метод. this не выходит за пределы вызываемой функции. Смотрите метод связывания.

Замечание об eval

Новички в JavaScript часто делают ошибку в использовании eval, где скобочная нотация может быть использоваться вместо него. Например, следующий синтаксис часто видели во многих скриптах.

x = eval('document.forms.form_name.elements.' + strFormControl + '.value');

eval медленный и его следует избегать, насколько это возможно. Также, strFormControl будет должен удерживать индентификатор, который не требуется для имен и ID форм. Лучше используйте квадратный скобки:

x = document.forms["form_name"].elements[strFormControl].value;

Спецификации

Спецификация Статус Комментарий
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Property Accessors' в этой спецификации.
Стандарт  
ECMAScript 5.1 (ECMA-262)
Определение 'Property Accessors' в этой спецификации.
Стандарт  
ECMAScript 1st Edition (ECMA-262)
Определение 'Property Accessors' в этой спецификации.
Стандарт Изначальное определение. Выполнена в JavaScript 1.0.

Поддержка браузерами

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Да) (Да) (Да) (Да) (Да)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Да) (Да) (Да) (Да) (Да) (Да)

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: sbadulin, karatheodory, BychekRU
 Обновлялась последний раз: sbadulin,