Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
• глобальные свойства, такие как undefined
, Infinity
и NaN
;
• глобальные функции, такие как isNaN(), parseInt()
(раздел 3.8.2) и eval()
(раздел 4.12);
• функции-конструкторы, такие как Date(), RegExp(), String(), Object()
и Array()
(раздел 3.8.2);
• глобальные объекты, такие как Math
и JS0N
(раздел 6.9).
Имена первоначально устанавливаемых свойств глобального объекта не являются зарезервированными словами, но вы вполне можете считать их таковыми. Все эти свойства перечислены в разделе 2.4.1. Некоторые из глобальных свойств уже описывались в этой главе. Большинство других будут рассматриваться в разных разделах книги. Кроме того, их все можно отыскать по именам в справочном разделе по базовому JavaScript или в описании самого глобального объекта, под именем « Global
». В клиентском JavaScript имеется объект Window
, определяющий другие глобальные свойства, описание которых можно найти в справочном разделе по клиентскому JavaScript.
В программном коде верхнего уровня, т. е. в JavaScript-коде, который не является частью функции, сослаться на глобальный объект можно посредством ключевого слова this
:
var global = this; // Определить глобальную переменную для ссылки на глобальный объект
В клиентском JavaScript роль глобального объекта для всего JavaScript-кода, содержащегося в соответствующем ему окне броузера, играет объект Window
. Этот глобальный объект имеет свойство window
, ссылающееся на сам объект, которое можно использовать вместо ключевого слова this
для ссылки на глобальный объект. Объект Window
определяет базовые глобальные свойства, а также дополнительные глобальные свойства, характерные для веб-броузеров и клиентского JavaScript.
При создании в глобальном объекте определяются все предопределенные глобальные значения JavaScript. Однако этот специальный объект может также хранить глобальные переменные программы. Если программа объявляет глобальную переменную, она становится свойством глобального объекта. Подробнее этот механизм описывается в разделе 3.10.2.
3.6. Объекты-обертки
Объекты в языке JavaScript являются составными значениями: они представляют собой коллекции свойств, или именованных значений. Обращение к свойствам мы будем выполнять с использованием точечной нотации. Свойства, значениями которых являются функции, мы будем называть методами. Чтобы вызвать метод m
объекта о, следует использовать инструкцию о.m().
Мы уже видели, что строки обладают свойствами и методами:
var s = "hello world!"; // Строка
var word = s.substring.indexOf(" ")+1, s.length); // Использование свойств строки
Однако строки не являются объектами, так почему же они обладают свойствами? Всякий раз когда в программе предпринимается попытка обратиться к свойству строки s, интерпретатор JavaScript преобразует строковое значение в объект, как если бы был выполнен вызов new String(s)
. Этот объект наследует (раздел 6.2.2) строковые методы и используется интерпретатором для доступа к свойствам. После обращения к свойству вновь созданный объект уничтожается. (От реализаций не требуется фактически создавать и уничтожать этот промежуточный объект, но они должны вести себя так, как если бы объект действительно создавался и уничтожался.)
Наличие методов у числовых и логических значений объясняется теми же причинами: при обращении к какому-либо методу создается временный объект вызовом конструктора Number()
или Boolean()
, после чего производится вызов метода этого объекта. Значения null
и undefined
не имеют объектов-оберток: любые попытки обратиться к свойствам этих значений будет вызывать ошибку ТуреError.
Рассмотрим следующий фрагмент и подумаем, что происходит при его выполнении:
var s = "test"; // Начальное строковое значение.
s.len = 4; // Установить его свойство.
var t = s.len; // Теперь запросить значение свойства.
В начале этого фрагмента переменная t
имеет значение undefined
. Вторая строка создает временный объект String
, устанавливает его свойство lеn
равным 4 и затем уничтожает этот объект. Третья строка создает из оригинальной (неизмененной) строки новый объект String
и пытается прочитать значение свойства len
. Строки не имеют данного свойства, поэтому выражение возвращает значение undefined
. Данный фрагмент показывает, что при попытке прочитать значение какого-либо свойства (или вызвать метод) строки числа и логические значения ведут себя подобно объектам. Но если попытаться установить значение свойства, эта попытка будет просто проигнорирована: изменение затронет только временный объект и не будет сохранено.
Временные объекты, которые создаются при обращении к свойству строки, числа или логического значения, называются объектами-обертками, и иногда может потребоваться отличать строки от объектов String
или числа и логические значения от объектов Number
и Boolean
. Однако обычно объекты-обертки можно рассматривать просто как особенность реализации и вообще не думать о них. Вам достаточно будет знать, что строки, числа и логические значения отличаются от объектов тем, что их свойства доступны только для чтения и что вы не можете определять для них новые свойства.
Обратите внимание, что существует возможность (но в этом почти никогда нет необходимости или смысла) явно создавать объекты-обертки вызовом конструктора String(), Number()
или Boolean()
:
var s = "test", n = 1, b = true; // Строка, число и логическое значение,
var S = new String(s); // Объект String
var N = new Number(n); // Объект Number
var В = new Boolean(b); // Объект Boolean
При необходимости интерпретатор JavaScript обычно автоматически преобразует объекты-обертки, т. е. объекты S, N и В в примере выше, в обертываемые ими простые значения, но они не всегда ведут себя точно так же, как значения s, n и Ь. Оператор равенства ==
считает равными значения и соответствующие им объекты-обертки, но оператор идентичности ===
отличает их. Оператор typeof
также обнаруживает отличия между простыми значениями и их объектами-обертками.
3.7. Неизменяемые простые значения и ссылки на изменяемые объекты
Между простыми значениями ( undefined
, null
, логическими значениями, числами и строками) и объектами (включая массивы и функции) в языке JavaScript имеются фундаментальные отличия. Простые значения являются неизменяемыми: простое значение невозможно изменить (или «трансформировать»). Это очевидно для чисел и логических значений - нет никакого смысла изменять значение числа. Однако для строк это менее очевидно. Поскольку строки являются массивами символов, вполне естественно было бы ожидать наличие возможности изменять символы в той или иной позиции в строке. В действительности JavaScript не позволяет сделать это, и все строковые методы, которые, на первый взгляд, возвращают измененную строку, на самом деле возвращают новое строковое значение. Например:
Интервал:
Закладка: