В 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