Объекты-обертки для элементарных типов данных 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объекты-обертки для элементарных типов данных



Для каждого из трех базовых типов данных определен соответствующий класс объектов. То есть помимоподдержки числовых, строковых и логических типов данных JavaScript поддерживает классы Number, Stringи Boolean. Эти классы представляют собой «обертки» для базовых типов данных. Обертка (wrapper) содержит такое же значение базового типа, но кроме этого определяет еще свойства и методы, которые могут использоваться для манипуляций с этим значением. JavaScript может гибко преобразовывать один тип в другой. Когда мы используем строку в объектном контексте, т. е. когда пытаемся обратиться к свойству или методу строки, JavaScript создает внутри себя объект-обертку для строкового значения. Этот объект Stringиспользуется вместо базового строкового значения.

Для объекта определены свойства и методы, поэтому удается задействовать значение базового типа в объектном контексте. То же самое, конечно, верно и для других базовых типов и соответствующих им объектовоберток; мы просто не работаем с другими типами в объектном контексте так же часто, как со строками.

Следует отметить, что объект String, созданный при использовании строки в объектном контексте, временный – он служит для того, чтобы обеспечить доступ к свойству или методу, после чего необходимость в нем отпадает, и потому он утилизируется системой. Предположим, что s– это строка, и мы определяем длину строки с помощью следующего предложения:

var len = s.length;

Здесь sостается строкой, и ее исходное значение не меняется. Создается новый временный объект String, позволяющий обращаться к свойству length, а затем этот объект удаляется, не меняя исходного значения переменной s.

Чтобы явно использовать объект Stringв своей программе, надо создать постоянный объект, который не будет автоматически удаляться системой. Объекты String создаются так же, как и другие объекты, – с помощью оператора new. Например:

var s = "hello world"; // Значение строкового типа

var S = new String("Hello World"); // Объект String

Наконец, следует отметить, что любые строки, числа или логические значения могут быть преобразованы в соответствующий объектобертку с помощью функции Object():

var number_wrapper = Object(3);

 

4.3.8 Преобразование объектов в значения элементарных типов

Тип преобразования зависит от контекста, в котором это преобразование производится. Существуют такие ситуации, когда невозможно однозначно определить контекст. Оператор +и операторы сравнения (<, <=,> и >=) могут оперировать как числами, так и строками, таким образом, когда в одной из таких операций участвует объект, возникает неоднозначность: в значение какого типа следует преобразовать объект – в строку или в число. В большинстве случаев интерпретатор JavaScript сначала пытается преобразовать объект с помощью метода valueOf().

Если этот метод возвращает значение элементарного типа (как правило, число), тогда используется это значение. Однако чаще всего метод valueOf() возвращает непреобразованный объект, и тогда интерпретатор JavaScript пытается преобразовать объект в строку вызовом метода toString().Однако здесь есть одно исключение из правил: когда с оператором +используется объект Date, преобразование сразу начинается с вызова метода toString().

 

Объявления переменых, обращения к ним, их типизация, область видимости

По значению или по ссылке

Существует два фундаментальных способа манипулирования данными: по значению и по ссылке. Когда выполняется манипулирование данной величиной по значению, это означает, что в операции участвует собственно значение данной величины. В операции присваивания создается копия фактического значения, после чего эта копия сохраняется в переменной, в свойстве объекта или в элементе массива. Копия и оригинал – это два совершенно независимых друг от друга значения, которые хранятся раздельно. Когда некоторая величина передается функции по значению, это означает, что функции передается копия. Если функция изменит полученное значение, эти изменения коснутся только копии и никак не затронут оригинал. Наконец, когда величина сравнивается по значению с другой величиной, два различных набора данных должны содержать одно и то же значение (это обычно подразумевает, что для выявления эквивалентности величин производится их побайтное сравнение).

Другой способ манипулирования значением – по ссылке. В этом случае существует только одна фактическая копия значения, а манипулирование производится посредством ссылок на это значение.

Когда действия со значением производятся по ссылке, переменные хранят не само значение, а лишь ссылки на него.

Именно эта ссылочная информация копируется, передается и участвует в операциях сравнения. Таким образом, в операции присваивания по ссылке участвует сама ссылка, а не копия значения и не само значение. После присваивания переменная будет ссылаться на то же самое значение, что и оригинальная переменная. Обе ссылки считаются абсолютно равноправными и в равной степени могут использоваться для манипулирования значением. Если значение изменяется с помощью одной ссылки, эти изменения будут наблюдаться с помощью другой ссылки. То же происходит, когда значение передается функции по ссылке. В функцию попадает ссылка на значение, а функция может использовать ее для изменения самого значения. Любые такие изменения становятся видимыми за пределами функции. Наконец, когда выполняется операция сравнения по ссылке, происходит сравнение двух ссылок, чтобы проверить, не ссылаются ли они на одно и то же значение. Ссылки на два разных значения, даже эквивалентные (т. е. состоящие из тех же самых байтов данных), не могут считаться равными.

Таблица 4.2 Сравнение методов обращения к данным

  По значению По ссылке
Копирование Выполняется копирование самого значения – образуются две независимые друг от друга копии.   Копируется только ссылка на значение. Если значение будет изменено с помощью вновь созданной копии ссылки, эти изменения будут наблюдаться при использовании оригинальной ссылки.
Передача Функции передается отдельная копия значения. Изменение этой копии не оказывает никакого влияния на значение за пределами функции.   Функции передается ссылка на значение. Если внутри функции значение будет изменено с помощью полученной ссылки, эти изменения будут наблюдаться и за ее пределами.
Сравнение Сравниваются два разных значения (часто побайтно), чтобы определить, равны ли они.   Сравниваются две ссылки, чтобы определить, ссылаются ли они на одно и то же значение. Ссылки на разные значения рассматриваются как неравные, даже если сами значения совершенно идентичны.

 



Поделиться:


Последнее изменение этой страницы: 2016-12-28; просмотров: 290; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.108.9 (0.007 с.)