В JavaScript балом правят объекты. Если вы поняли объекты, вы поняли JavaScript.
В JavaScript почти всё объекты:
- Логические значения могут быть объектами (если определены при помощи ключевого слова new)
 - Числа могут быть объектами (если определены при помощи ключевого слова new)
 - Строки могут быть объектами (если определены при помощи ключевого слова new)
 - Даты (Date) всегда объекты
 - Математические константы и функции (Math) всегда объекты
 - Регулярные выражения всегда объекты
 - Массивы всегда объекты
 - Функции всегда объекты
 - Объекты всегда объекты
 
Все значения в JavaScript, за исключением примитивов, являются объектами.
Примитивы в JavaScript
Примитивные значения это значения, у которых нет свойств и методов.
Примитивный тип это тип данных, у которых примитивное значение.
JavaScript определяет 5 примитивных типов данных:
- string
 - number
 - boolean
 - null
 - undefined
 
Примитивные значения неизменяемы (они жестко заданы и не могут быть изменены).
Если x = 3.14, вы можете изменить значение x. Но вы не можете изменить значение 3.14.
| Значение | Тип | Комментарий | 
|---|---|---|
| "Привет" | string | "Привет" всегда "Привет" | 
| 3.14 | number | 3.14 всегда 3.14 | 
| true | boolean | true всегда true | 
| false | boolean | false всегда false | 
| null | null (object) | null всегда null | 
| undefined | undefined | undefined всегда undefined | 
Объекты это переменные
Переменные JavaScript могут содержать одиночные значения:
var person = "Иван Петров"; 
Объекты – тоже переменные. Но объекты могут содержать множество значений.
Значения в объектах записываются в виде пар имя:значение (имя и значение разделяются двоеточием).
var person = {firstName:"Иван", lastName:"Петров", age:50, eyeColor:"карие"}; 
Объект в JavaScript это набор именованных значений.
Свойства объекта
Именованные значения объектов в JavaScript называются свойствами.
| Свойство | Значение | 
|---|---|
| firstName | Иван | 
| lastName | Петров | 
| age | 50 | 
| eyeColor | карие | 
Объекты, записанные в виде пар имя-значение, аналогичны:
- ассоциативным массивам в PHP
 - словарям в Python
 - хэш-таблицам в C
 - хэш-картам в Java
 - хэшам в Ruby и Perl
 
Методы объекта
Методы это действия, которые можно выполнить с объектами.
Свойствами объектов могут быть как примитивные значения, так и другие объекты и функции.
Метод объекта это свойство, которое содержит определение функции.
| Свойство | Значение | 
|---|---|
| firstName | Иван | 
| lastName | Петров | 
| age | 50 | 
| eyeColor | карие | 
| fullName | function() { return this.firstName + " " + this.lastName; } | 
Объекты JavaScript это контейнеры для именованных значений, которые называются свойства и методы.
Создание объектов JavaScript
В JavaScript вы можете определять и создавать свои собственные объекты.
Существует несколько способов создания объектов:
- Определение и создание объекта при помощи объектного литерала.
 - Определение и создание объекта при помощи ключевого слова new.
 - Определение конструктора объекта и создание переменных с типом этого конструктора.
 
В ECMAScript 5 объекты также можно создавать при помощи функции Object.create().
Использование объектных литералов
Это самый простой способ создания объектов JavaScript.
Используя объектные литералы, вы одновременно определяете и создаете объект.
Объектный литерал — это список из пар имя:значение (вроде age:50), помещенных в фигурные скобки { }.
В следующем примере создается новый объект JavaScript с четырьмя свойствами:
var person = {firstName:"Иван", lastName:"Петров", age:50, eyeColor:"карие"}; 
Пробелы и переносы строки не имеют значения. Определение объекта может занимать несколько строк:
var person = {
    firstName:"Иван",
    lastName:"Петров",
    age:50,
    eyeColor:"карие"
}; 
Использование ключевого слова new
В следующем примере также создается новый объект JavaScript с четырьмя свойствами:
 var person = new Object();
 person.firstName = "Иван";
 person.lastName = "Петров";
 person.age = 50;
 person.eyeColor = "карие";
Внимание! Код в двух предыдущих примерах делает одно и то же. Поэтому нет необходимости использовать выражение new Object(). Для простоты, лучшей читаемости и большей скорости выполнения используйте первый вариант создания объектов (при помощи объектных литералов).
Работа по ссылке
Объекты JavaScript адресуются только по ссылке, а не по значению.
Так, если переменная person является объектом, то следующее выражение не создаст ее копию:
var x = person;  // Это не создаст копию переменной person. 
Объект x это не копия объекта person. Это и есть объект person. И x, и person – один и тот же объект.
Любые изменения объекта x также приведут к аналогичным изменениям объекта person, потому что x и person это один и тот же объект.
 var person = {firstName:"Иван", lastName:"Петров", age:50, eyeColor:"карие"}
 var x = person;
 x.age = 10;           // Это изменит как x.age, так и person.age