Функции объекта 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 (все свойства встроенных объектов являются неперечислимыми).
Вывод этого фрагмента имеет следующий вид: