(Из книги "Говоря на языке JavaScript").
В JavaScript, как и во всех популярных языках программирования, есть много типов для создания переменных: логическое значение, число, строка, массив и т.д. Все эти типы обладают свойствами (properties). Каждое свойство имеет имя (ключ) и значение. Вы можете рассматривать эти свойства как поля или записи в таблице. Чтобы их прочитать, используется оператор точка (.):
value.propKey
Например, у строки 'abc' есть свойство length (длина):var str = 'abc'; str.length // Содержит 3.
Ту же мысль можно выразить так:
'abc'.length
Оператор точка используется также для присвоения значений свойствам:
var obj = {}; // Создаем пустой объект.
obj.foo = 123; // Создаем внутри него свойство `foo` и присваиваем ему значение 123.
Это же правило можно использовать для вызова методов:'hello'.toUpperCase() // Перевод букв строки в верхний регистр. Результатом будет 'HELLO'.
Притмитивы и объекты
-
Существуют переменные-примитивы: логические, числовые, строковые значения, а также
nullиundefined. - Все остальные переменные представляют собой тип objects и унаследованные от него сущности.
var obj1 = {}; // Пустой объект.
var obj2 = {}; // Еще один пустой объект.
obj1 === obj2 // false
obj1 === obj1 // true
Переменные-примитивы, напротив, считаются равными друг другу, если равны содержащиеся в них значения:
var prim1 = 123; var prim2 = 123; prim1 === prim2 // true
Ниже разница между примитивами и объектами будет объяснена более подробно.
Примитивы
-
Логические (boolean):
true,false(см. Логические значения) -
Числа:
1736,1.351(см. Числовые значения) -
Строки:
'abc',"abc"(см. Строковые значения) -
Два типа, означающие “отсутствие”:
undefined,null(см. undefined и null)
- Их можно сравнивать по значению (содержимому):
3 === 3 // true 'abc' === 'abc'// true
- Примитивы всегда имеют неизменные свойства, которые невозможно также удалить или добавить новые:
-
var str = 'abc'; str.length = 1; // Попробуем изменить свойство `length`. str.length // Не получилось, по-прежнему 3. str.foo = 3; // Попробуем создать для строки новое свойство `foo`. str.foo // Не получилось, возвращается значение undefined, т.е. неопределенное.
Объекты
- Простые объекты (см. Отдельный объект):
{firstName:'Jane',lastName:'Doe'}Только что приведенный объект имеет два свойства: значением свойстваfirstNameявляется строка'Jane',а значением свойстваlastName- строка'Doe'. - Массивы (см. Массивы):
['apple','banana','cherry']Только что приведенный массив имеет три элемента, которые могут быть вызваны по их порядковым номерам, называемым индексами. Нумерация начинается с 0 и, например, индекс элемента'apple'будет 0. - Регулярные выражения (см. Регулярные выражения):
/^a+b+$/
- Сравниваются по ссылке.
- Каждый объект имеет собственный идентификатор, и даже если их содержимое идентично, они не равны:
({} === {}) // Два разных объекта. Результат сравнения - false. var obj1 = {}; var obj2 = obj1; obj1 === obj2 // true - По умолчанию структура объектов изменяема.
- Вы можете свободно изменять, добавлять, удалять свойства объектов (см. Отдельный объект):
var obj = {}; obj.foo = 123; // Добавили свойство `foo`. obj.foo // 123
undefined и null
undefined и null:undefinedозначает “нет значения.” Переменные, которым еще не присвоены значения - вот один из примеровundefined:var foo; foo // undefined
Необъявленные переменные - еще один примерundefined:function f(x) { return x } f() // undefinedЕсли вы пытаетесь обратиться к несуществующему свойству объекта, то тоже получитеundefined:
var obj = {}; // Объект без свойств. obj.foo // undefined-
nullозначает “нет объекта”. Этот тип сложился исторически и от него можно было бы отказаться в новых версиях JavaScript, но это повлекло бы проблемы, связанные с поддержкой кода, написанного ранее.
Внимание
undefinedиnullне имеют свойств и даже стандартных методов, имеющихся у других объектов, таких какtoString().
Проверка на undefined или null
undefined или null вы можете с помощью выражений такого вида:
if(x===undefined||x===null){...}
Вы можете также использовать тот факт, что в JavaScript как undefined, так и null можно рассматривать как некую разновидность false:
if(!x){...}
Внимание
false,0,NaN, and''(пустые кавычки) также часто употребляются в том же смысле, что иfalse(см. Правдивое и ложное).
Определение типа переменных с помощью typeof и instanceof
typeof в основном применяется к примитивам, тогда как instanceof используется для объектов. typeof используется так:
typeofvalue
Он возвращает строку, описывающую тип переменной (в данном случае value). Вот несколько примеров:typeof true // 'boolean'
typeof 'abc' // 'string'
typeof {} // 'object'
typeof [] // Тоже 'object' (типа array не существует, это разновидность object).
Следующая таблица показывает результаты применения оператора
typeof к различным типам переменных:| Операнд | Результат |
undefined | 'undefined' |
null | 'object' |
| Логическое значение | 'boolean' |
| Числовое значение | 'number' |
| Строковое значение | 'string' |
| Функция | 'function' |
| Все остальные нормальные значения | 'object' |
typeof null возвращает 'object', так сложилось исторически, хотя null в строгом смысле не является объектом.Оператор instanceof используется так:
valueinstanceofConstr
Он возвращает
true, если value является объектом, созданным помощью конструктора Constr (см. Конструкторы: фабрики объектов). Вот несколько примеров:var b = new Bar(); // Объект создан с помощью конструктора Bar.
b instanceof Bar // true
{} instanceof Object // true
[] instanceof Array // true
[] instanceof Object // true, т.к. Array является "подконструктором" Object.
undefined instanceof Object // false
null instanceof Object // false
Комментариев нет:
Отправить комментарий