Функции объекта Object

Для объектного типа Object определено три функции: toLocaleString(), toString() и valueOf().

Функция toString() возвращает строковое представление объекта. Эта функция доступна для всех объектов, кроме Math и Global. По умолчанию она выводит следующую строку:

[object имя-объекта]

Однако для объектов Array, Boolean, Date, Function, Number и String эта функция переопределена следующим образом:

· для объекта типа Array: элементы массива преобразуются в строки, а затем возвращается строка, в которой элементы массива отделены друг от друга запятыми;

· для объекта типа Boolean: если булевское значение равно true, возвращается строка "true", иначе возвращается строка "false";

· для объекта типа Date возвращается строковое представление даты;

· для объекта типа Function возвращается следующая строка:

function anonymous( ) { [предложения-в-теле-функции] }

для объектов типа Function и текст функции для функций, определенных с помощью предложения function;

· для объекта типа Number возвращается строковое представление числа;

· для объекта типа String возвращается значение строки.

 

Функция valueOf() возвращает по умолчанию сам объект. Этот метод доступен для всех встроенных объектов, кроме Math и Global.

Однако для объектов Array, Boolean, Date, Function, Number и String эта функция переопределена следующим образом:

· для объекта типа Array: элементы массива преобразуются в строки, а затем возвращается строка, в которой элементы массива отделены друг от друга запятыми;

· для объекта типа Boolean возвращается булевское значение объекта (true или false);

· для объекта типа Date возвращается значение времени, прошедшего с 1 января 1970 года (в миллисекундах);

· для объекта типа Function возвращается следующая строка:

function anonymous( ) { [предложения-в-теле-функции] }

для объектов типа Function и текст функции для функций, определенных с помощью предложения function;

· для объекта типа Number возвращается его числовое представление;

· для объекта типа String возвращается значение строки.

 

Пример 4.4.61. Использование функций toString() и valueOf() объекта Object:

// Создание объекта Array

arrayObj = new Array("abc", false, 5);

// Вывод значений функций toString() и

// valueOf() для объекта Array

alert("toString() для Array: '" + arrayObj.toString() +

"'\nvalueOf() для Array: '" + arrayObj.valueOf() + "'");

// Создание объекта Boolean

booleanObj = new Boolean("true");

// Вывод значений функций toString() и

// valueOf() для объекта Boolean

alert("toString() для Boolean: '" + booleanObj.toString() +

"'\nvalueOf() для Boolean: '" + booleanObj.valueOf() + "'");

// Создание объекта Date

dateObj = new Date();

// Вывод значений функций toString() и

// valueOf() для объекта Date

alert("toString() для Date: '" + dateObj.toString() +

"'\nvalueOf() для Date: '" + dateObj.valueOf() + "'");

// Создание объекта Function

functionObj = new Function("x", "y", "return x + y;");

// Вывод значений функций toString() и

// valueOf() для объекта Function

alert("toString() для Function: \n'" +

functionObj.toString() +

"'\nvalueOf() для Function: \n'" +

functionObj.valueOf() + "'");

// Создание объекта Number

numberObj = new Number(3.8e3);

// Вывод значений функций toString() и

// valueOf() для объекта Number

alert("toString() для Number: '" + numberObj.toString() +

"'\nvalueOf() для Number: '" + numberObj.valueOf() + "'");

// Создание объекта String

stringObj = new String("Строка 1");

// Вывод значений функций toString() и

// valueOf() для объекта String

alert("toString() для String: '" + stringObj.toString() +

"'\nvalueOf() для String: '" + stringObj.valueOf() + "'");

В этом фрагменте сценария создаются объекты разных типов и для них выводятся значения функций toString()и valueOf().

Вывод этого фрагмента имеет следующий вид:

     

 

Функция

hasOwnProperty(имя-свойства)

возвращает булевское значение true, если объект имеет указанное в параметре свойство и false в противном случае.

Функция

isPrototypeOf(имя)

возвращает булевское значение true, если параметр имя является объектом и объект содержится в цепочке его прототипов, и false в противном случае.

Функция

propertyIsEnumerable(имя-свойства)

возвращает булевское значение true, если объект имеет свойство с данным именем и это свойство не имеет атрибута DontEnum (неперечислимое свойство), и false в противном случае. Функция проверяет на наличие свойства только сам объект, но не его прототипы.

Свойства, имеющие атрибут DontEnum, не являются перечислимыми, т.е. их нельзя вывести при перечислении свойств в предложении for…in (см. 4.4.13.1).

 

Пример 4.4.62. Использование функций hasOwnProperty(), isPrototypeOf() и propertyIsEnumerable() объекта Object:

1. // Объявление объекта d,

// имеющего прототипом объект String

var d = new String("Строка 1");

// Проверка наличия свойства length у объекта d

var hasDLengthProperty = d.hasOwnProperty("length");

// Проверка наличия свойства split у объекта d

var hasDSplitProperty = d.hasOwnProperty("split");

// Проверка наличия свойства length у объекта String

var hasStringLengthProperty =

String.prototype.hasOwnProperty("length");

// Проверка наличия свойства split у объекта String

var hasStringSplitProperty =

String.prototype.hasOwnProperty("split");

// Вывод результатов

alert("Есть у d свойство length: " + hasDLengthProperty +

"\nЕсть у d свойство split: " + hasDSplitProperty +

"\nЕсть у String свойство length: " +

hasStringLengthProperty +

"\nЕсть у String свойство split: " + hasStringSplitProperty);

// Проверка, является ли String прототипом d

isDStringObject = String.prototype.isPrototypeOf(d);

// Проверка, является ли Array прототипом d

isDArrayObject = Array.prototype.isPrototypeOf(d);

// Вывод результатов

alert("Является String прототипом d? Ответ=" +

isDStringObject +

"\nЯвляется Array прототипом d? Ответ=" + isDArrayObject);

В этом фрагменте сценария проверяется, с помощью функции hasOwnProperty(), наличие свойств length и split у объекта d типа String и этих же свойств у прототипа String. После этого с помощью функции isPrototypeOf() проверяется, является ли прототипом объекта d прототипы String или Array.

Вывод этого фрагмента имеет следующий вид:

 

2. // Объявление массива g,

// имеющего прототипом объект Array

g = new Array(1, 2, 3);

// Проверка, является ли первый элемент

// массива g перечислимым

isGFirstElementEnum = g.propertyIsEnumerable(0);

// Проверка, является ли второй элемент

// массива g перечислимым

isGSecondElementEnum = g.propertyIsEnumerable(1);

// Проверка, является ли свойство length

// массива g перечислимым

isGLengthPropertyEnum = g.propertyIsEnumerable("length");

// Проверка, является ли свойство length

// прототипа Array перечислимым

isArrayLengthPropertyEnum =

Array.prototype.propertyIsEnumerable('length');

// Вывод результатов

alert("Является первый элемент массива g " +

"перечислимым? Ответ=" + isGFirstElementEnum +

"\nЯвляется второй элемент массива g перечислимым? Ответ=" +

isGSecondElementEnum +

"\nЯвляется свойство length массива g перечислимым? Ответ=" +

isGLengthPropertyEnum +

"\nЯвляется свойство length прототипа Array " +

"перечислимым? Ответ=" + isArrayLengthPropertyEnum);

В этом фрагменте сценария выполняется проверка, с помощью функции propertyIsEnumerable() перечислимости элементов массива, а также перечислимость свойства length у массива g и прототипа Array (все свойства встроенных объектов являются неперечислимыми).

Вывод этого фрагмента имеет следующий вид: