Книга: JavaScript. Подробное руководство, 6-е издание

Object

Object

Object

надкласc, реализующий общие возможности всех JavaScript-объектов

Конструктор

new Object()
new Object(значение)

Аргументы

значение Этот необязательный аргумент определяет элементарное значение-число, логическое значение или строку, которое должно быть преобразовано в объект Number, Boolean или String.

Возвращаемое значение

Если аргумент значение указан, конструктор возвращает вновь созданный экземпляр Object. Если указан аргумент значение элементарного типа, конструктор создаст объект-обертку Number, Boolean или String для указанного элементарного значения. Если конструктор Object() вызывается как функция (без оператора new), он действует точно так же, как при вызове с оператором new.

Свойства

constructor Ссылка на функцию, которая была конструктором объекта.

Методы

hasOwnProperty()

Проверяет, имеет ли объект собственное (не унаследованное) свойство с указанным именем.

isPrototypeOf()

Проверяет, является ли данный объект прототипом для указанного объекта.

propertyIsEnumerable()

Проверяет, существует ли свойство с указанным именем и будет ли оно перечислено циклом for/in.

toLocaleString()

Возвращает локализованное строковое представление объекта. Реализация по умолчанию этого метода просто вызывает метод toString(), но подклассы могут переопределять его для выполнения локализации.

toString()

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

valueOf()

Возвращает элементарное значение объекта, если оно существует. Для объектов типа Object этот метод просто возвращает сам объект. Подклассы Object, такие как Number и Boolean, переопределяют этот метод, чтобы можно было получить элементарное значение, связанное с объектом.

Статические методы

В ECMAScript 5 конструктор Object служит пространством имен для следующих глобальных функций:

Object.create()

Создает новый объект с указанным прототипом и свойствами.

Object.defineProperties()

Создает или настраивает одно или более свойств в указанном объекте.

Object.defineProperty()

Создает или настраивает свойство в указанном объекте.

Object.freeze()

Делает указанный объект неизменяемым.

Object.getOwnPropertyDescriptor()

Возвращает атрибуты указанного свойства в указанном объекте.

Object.getOwnPropertyNames()

Возвращает массив имен всех неунаследованных свойств в указанном объекте, включая свойства, не перечисляемые циклом for/in.

Object.getPrototypeOf()

Возвращает прототип указанного объекта.

Object.isExtensible()

Определяет, могут ли добавляться новые свойства в указанный объект.

Object.isFrozen()

Определяет, является ли указанный объект фиксированным.

Object.isSealed()

Определяет, является ли указанный объект нерасширяемым, а его свойства недоступными для настройки.

Object.keys()

Возвращает массив имен неунаследованных перечислимых свойств в указанном объекте.

Object.preventExtensions()

Предотвращает возможность добавления новых свойств в указанный объект.

Object.seal()

Предотвращает возможность добавления новых и удаления существующих свойств в указанном объекте.

Описание

Класс Object - это встроенный тип данных языка JavaScript. Он играет роль надкласса для всех остальных JavaScript-объектов; следовательно, методы и поведение класса Object наследуются всеми остальными объектами. Об основных особенностях JavaScript-объектов рассказывается в главе 6.

В дополнение к показанному ранее конструктору Object() объекты могут создаваться и инициализироваться с помощью синтаксиса объектных литералов, описанного в разделе 6.1.

См. также

Array, Boolean, Function, Function.prototype, Number, String; глава 6

Object.constructor

функция-конструктор объекта

Синтаксис

объект.constructor

Описание

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

а = new Array(1,2,3); // Создать объект
a.constructor == Array // Равно true

Одно из распространенных применений свойства constructor состоит в определении типа неизвестных объектов. Оператор typeof позволяет определить, является ли неизвестный объект элементарным значением или объектом. Если это объект, то посредством свойства constructor можно определить тип этого объекта. Например, следующая функция позволяет узнать, является ли данное значение массивом:

function isArray(x) {
  return ((typeof x == "object") && (x.constructor == Array));
}

Однако следует отметить, что, хотя этот прием эффективен для объектов, встроенных в базовый JavaScript, его работа с объектами среды выполнения клиентского JavaScript, такими как объект Window, не гарантируется. Реализация по умолчанию метода Object.toString() представляет другой способ определения типа неизвестного объекта.

См. также

Object. toString()

Object.create() (ECMAScript 5)

создает объект с указанным прототипом и свойствами

Синтаксис

Object.create(прототип)
Object.create (прототип, дескрипторы)

Аргументы

прототип Прототип создаваемого объекта или null.

дескрипторы Необязательный объект, отображающий имена свойств в их дескрипторы.

Возвращаемое значение

Вновь созданный объект, наследующий прототип и обладающий свойствами, описываемыми дескрипторами.

Исключения

ТуреЕrror Генерируется, если прототип не является объектом или значением null или если указанные дескрипторы заставляют метод Object.definePгорегties() сгенерировать исключение ТуреЕrror.

Описание

Функция Object.create() создает и возвращает новый объект с прототипом, определяемым аргументом прототип. Это означает, что новый объект наследует свойства от прототипа.

Если указан необязательный аргумент дескрипторы, функция Object.create() добавит в новый объект свойства, как если бы был вызван метод Object.defineProperties(). То есть вызов функции Object.create(p,d) с двумя аргументами эквивалентен вызовам:

Object.defіneProperties(Object.create(p), d);

Дополнительную информацию об аргументе дескрипторы можно найти в справочной статье Object.defineProperties(), а описание дескрипторов свойств в справочной статье Object.getOwnPropertyDescriptor().

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Пример

// Создать объект, который имеет собственные свойства х и у и наследует свойство z
var р = Object.create({z:0}, {
  x: { value: 1, writable: false, enumerable:true, configurable: true},
  y: { value: 2, writable: false, enumerable:true, configurable: true},
});

См. также

Object.defineProperty(), Object.defineProperties(), Object.getOwnPropertyDescriptor(), разделы 6.1, 6.7

Object.defineProperties() (ECMAScript5)

создает или настраивает свойства объекта

Синтаксис

Object.defineProperties(o, дескрипторы)

Arguments

о Объект, в котором будут создаваться или настраиваться свойства.

дескрипторы Объект, отображающий имена свойств в их дескрипторы.

Возвращаемое значение

Объект о.

Исключения

ТуреЕrror Генерируется, если аргумент о не является объектом или если какое-либо из указанных свойств не может быть создано или настроено. Эта функция не является атомарной: она может создать или настроить часть свойств и затем возбудить исключение, не создав или не настроив другие свойства. Перечень ошибок, которые могут вызвать исключение ТуреЕrror, приводится в разделе 6.7.

Описание

Функция Object.defineProperties() создает или настраивает свойства объекта о, указанные и описанные в аргументе дескрипторы. Имена свойств объекта дескрипторы являются именами свойств, которые будут созданы или настроены в объекте о, а значениями этих свойств являются объекты дескрипторов свойств, которые определяют атрибуты создаваемых или настраиваемых свойств.

Функция Object.defineProperties() действует подобно функции Object.defineProperty(); дополнительные подробности смотрите в описании этой функции. Дополнительные сведения об объектах дескрипторов свойств приводятся в справочной статье Object. getOwnPropertyDescriptor().

Пример

// Добавить в новый объект свойства х и у, доступные только для чтения
var р = Object.defineProperties({}, {
  х: { value: 0, writable: false, enumerable:true, configurable: true},
  y: { value: 1, writable: false, enumerable:true, configurable: true},
});

См. также

Object.create(), Object.defineProperty(), Object.getOwnPropertyDescriptor(), раздел 6.7

Object.defineProperty() (ECMAScript 5)

создает или настраивает одно свойство в объекте

Синтаксис

Object.defineProperty(o, имя, дескриптор)

Аргументы

о

Объект, в котором будет создаваться или настраиваться свойство.

имя Имя создаваемого или настраиваемого свойства.

дескриптор Объект дескриптора свойства, описывающий новое свойство или изменения, которые должны быть выполнены в существующем свойстве.

Возвращаемое значение

Объект о.

Исключения

ТуреЕrror Генерируется, если аргумент о не является объектом или если свойство не может быть создано (из-за того, что объект о является нерасширяемым) или настроено (например, из-за того, что уже существующее свойство является ненастраиваемым). Перечень ошибок, которые могут вызвать исключение ТуреЕrror, приводится в разделе 6.7.

Описание

Функция Object.defineProperty() создает или настраивает свойство с именем имя в объекте о, используя описание свойства в аргументе дескриптор. Дополнительные сведения об объектах дескрипторов свойств приводятся в справочной статье Object.getOwnPropertyDescriptor().

Если объект о еще не имеет свойства с именем имя, эта функция просто создаст новое свойство с атрибутами и значением, указанными в дескрипторе. Если в дескрипторе не указаны какие-либо атрибуты, соответствующие им атрибуты получат значение false или undefined.

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

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Пример

function constant(o, n, v) { // Определить константу о.n со значением v
  Object.defineProperty(o, n, { value: v, writable: false
    enumerable: true, configurable:false});
}

См. также

Object.create(), Object.defineProperties(), Object.getOwnPropertyDescriptor(), раздел 6.7

Object.freeze() (ECMAScript 5)

делает объект неизменяемым

Синтаксис

Object.freeze(o)

Аргументы

о Объект, который должен быть зафиксирован.

Возвращаемое значение

Зафиксированный объект о.

Описание

Функция Object.freeze() делает объект о нерасширяемым (Object.preventExtensions()), а все его собственные свойства - ненастраиваемыми, подобно функции Object.seal(). Однако в дополнение к этому она делает все неунаследованные свойства доступными только для чтения. Это означает, что в объект о нельзя будет добавлять новые свойства, а существующие свойства-данные нельзя будет изменить или удалить. Действие функции Object.freeze() является необратимым, т.е. зафиксированный объект нельзя снова сделать доступным для изменения.

Имейте в виду, что функция Object.freeze() устанавливает атрибут writable, имеющийся только в свойствах-данных. Она не действует на свойства, имеющие методы записи. Отметьте также, что функция Object.freeze() не действует на унаследованные свойства. Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

См. также

Object.defineProperty(), Object.isFrozen(), Object.preventExtensions(), Object.seal(), раздел 6.8.3

Object.getOwnPropertyDescriptor() (ECMAScript 5)

возвращает атрибуты свойства

Синтаксис

Object.getOwnPropertyDescriptor(o, имя)

Аргументы

о Объект, которому принадлежит искомое свойство.

имя Имя свойства (или индекс элемента массива), атрибуты которого требуется получить.

Возвращаемое значение

Объект дескриптора для указанного свойства заданного объекта или undefined, если такое свойство не существует.

Описание

Функция Object.getOwnPropertyDescriptor() возвращает дескриптор для указанного свойства заданного объекта. Дескриптор свойства - это объект, описывающий атрибуты и значение свойства. Более полная информация приводится в следующем подразделе. Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Дескрипторы свойств

Дескриптор свойства - это обычный JavaScript-объект, описывающий атрибуты (и иногда значение) свойства. В языке JavaScript существует два типа свойств. Свойства-данные, имеющие значение и три атрибута: enumerable, writable и configurable. Свойства с методами доступа, имеющие метод чтения и/или метод записи, а также атрибуты enumerable и configurable.

Дескриптор свойства с данными имеет следующий вид:

{
value: /* любое значение, допустимое в языке JavaScript */,
writable: /* true или false */,
enumerable: /* true или false */,
configurable: /* true или false */
}

Дескриптор свойства с методами доступа имеет следующий вид:

{
get: /* функция или undefined: взамен свойства value */,
set: /* функция или undefined: взамен атрибута writable */,
enumerable: /* true или false */,
configurable: /* true или false */
}

См. также

Object.defineProperty(), раздел 6.7

Object.getOwnPropertyNames() (ECMAScript 5)

возвращает имена неунаследованных свойств

Синтаксис

Object. getOwnPropertyNames(o)

Аргументы

о Объект.

Возвращаемое значение

Массив, содержащий имена всех неунаследованных свойств объекта о, включая неперечислимые свойства.

Описание

Функция Object.getOwnPropertyNames() возвращает массив с именами всех неунаследованных объекта о, включая неперечислимые свойства. Для получения массива имен только перечислимых свойств можно использовать функцию Object.keys().

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Пример

Object.getOwnPropertyNames([]) // => ["length"]: "length" - неперечислимое

См. также

Object.keys(), раздел 6.5

Object.getPrototypeOf() (ECMAScript 5)

возвращает прототип объекта

Синтаксис

Object.getPrototypeOf(о)

Аргументы

о Объект.

Возвращаемое значение

Прототип объекта о.

Описание

Функция Object.getPrototypeOf() возвращает прототип своего аргумента. Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Пример

var р = {}; // Обычный объект
Object.getPrototypeOf(р) // => Object.prototype
var о = Object.create(p) // Объект, наследующий объект р
Object.getPrototypeOf(о) // => р

См. также

Object.create(); глава 6

Object.hasOwnProperty()

проверяет, является ли свойство унаследованным

Синтаксис

объект.hasOwnPropertу(имя_свойства)

Аргументы

имя_свойства

Строка, содержащая имя свойства объекта.

Возвращаемое значение

Возвращает true, если объект имеет неунаследованное свойство с именем, заданным в имени_свойства. Возвращает false, если объект не имеет свойства с указанным именем или если он наследует это свойство от своего объекта-прототипа.

Описание

В главе 9 говорится, что JavaScript-объекты могут иметь собственные свойства, а также наследовать свойства от своих объектов-прототипов. Метод hasOwnProperty() предоставляет способ, позволяющий установить различия между унаследованными свойствами и неунаследованными локальными свойствами.

Пример

var о = new Object(); // Создать объект
о.х = 3.14; // Определить неунаследованное свойство
о.hasOwnProperty("x"); // Вернет true: х - это локальное свойство о
о.hasOwnProperty("y"); // Вернет false: о не имеет свойства у ");
о.hasOwnProperty("toString") // Вернет false: свойство toString унаследовано

См. также

Function.prototype, Object.propertyIsEnumerable(); глава 9

Object.isExtensible() (ECMAScript 5)

возможно ли добавить в объект новое свойство?

Синтаксис

Object.isExtensible(o)

Аргументы

о Объект, проверяемый на возможность расширения

Возвращаемое значение

true, если в объект можно расширить новыми свойствами, и false - если нет.

Описание

Если в объект можно добавлять новые свойства, он является расширяемым. Все объекты сразу после создания являются расширяемыми и остаются таковыми, пока не будут переданы функции Object.preventExtensions(), Object.seal() или Object.freeze().

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Пример

var о = {}; // Создать новый объект
Object.isExtensible(o) // => true: он является расширяемым
Object.preventExtensions(o); // Сделать нерасширяемым
Object.isExtensible(o) // => false: теперь он нерасширяемый

См. также

Object.isFrozen(), Object.isSealed(), Object.preventExtensions(), раздел 6.8.3

Object.isFrOZen() (ECMAScript 5)

объект является неизменяемым?

Синтаксис

Object.isFrozen(o)

Аргументы

о Проверяемый объект.

Возвращаемое значение

true, если объект о является зафиксированным и неизменяемым, и false - если нет.

Описание

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

Обычно фиксация объектов выполняется с помощью функции Object.freeze(). Однако зафиксировать объект можно также с помощью функции Object.preventExtensions() с последующим вызовом Object.defineProperty(), чтобы сделать все свойства объекта неудаляемыми и доступными только для чтения.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

См. также

Object.defineProperty(), Object.freeze(), Object.isExtensible(), Object.isSealed(), Object. preventExtensions(), Object.seal(), раздел 6.8.3

Object.isPrototypeOf()

проверяет, является ли один объект прототипом другого объекта

Синтаксис

объект.isPrototypeOf(о)

Аргументы

о Любой объект.

Возвращаемое значение

Возвращает true, если объект является прототипом объекта о. Возвращает false, если о не является объектом или если данный объект не является прототипом объекта о.

Описание

Как объяснялось в главе 9, объекты в языке JavaScript наследуют свойства от своих объектов-прототипов. К прототипу объекта можно обращаться с помощью свойства prototype функции-конструктора, которая использовалась для создания и инициализации объекта. Метод isPrototypeOf() позволяет определить, является ли один объект прототипом другого. Этот прием может применяться для определения класса объекта.

Пример

var о = new Object(): // Создать объект
Object.prototype.isPrototypeOf(о) //true: о - объект
Function.prototype.isPrototypeOf(o.toString); // true: toString - функция
Array.prototype.isPrototypeOf([1,2,3]): // true: [1,2,3] - массив
// Ту же проверку можно выполнить другим способом
(о.constructor == Object): // true: о создан с помощью конструктора
Object() (о.toString.constructor == Function): // true: о.toString - функция
// Объекты-прототипы сами имеют прототипы. Следующий вызов вернет true, показывая, что
// объекты-функции наследуют свойства от Function.prototype, а также от Object.prototype.
Object.prototype.isPrototypeOf(Function.prototype):

См. также

Function.prototype, Object.constructor; глава 9

Object.isSealed() (ECMAScript 5)

возможно ли добавлять в объект новые и удалять существующие свойства?

Синтаксис

Object.isSealed(o)

Аргументы

о Проверяемый объект.

Возвращаемое значение

true, если объект о является нерасширяемым, с недоступными для настройки свойствами, и false - если нет.

Описание

Объект считается нерасширяемым, с недоступными для настройки свойствами, если в него нельзя добавить новые (неунаследованные) свойства и нельзя удалить существующие (неунаследованные) свойства. Функция Object.isSealed() проверяет, является ли ее аргумент нерасширяемым объектом, с недоступными для настройки свойствами, или нет. Недоступные для настройки свойства нельзя вновь сделать настраиваемыми. Обычно такие объекты получают с помощью функции Object.seal() или Object.freeze(). Однако того же эффекта можно добиться с помощью функции Object.preventExtensions(), с последующим вызовом Object.defineProperty(), чтобы сделать все свойства объекта неудаляемыми.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

См. также

Object.defineProperty(), Object.freeze(), Object.isExtensible(), Object.isFrozen(), Object. preventExtensions(), Object.seal(), раздел 6.8.3

Object.keys() (ECMAScript 5)

возвращает имена собственных перечислимых свойств

Синтаксис

Object.keys(o)

Аргументы

о Объект.

Возвращаемое значение

Массив, содержащий имена всех перечислимых (неунаследованных) свойств объекта о.

Описание

Функция Object.keys() возвращает массив с именами свойств объекта о. Массив включает только имена свойств, которые являются перечислимыми и определены непосредственно в объекте о: унаследованные свойства не включаются. (Для получения имен неперечислимых свойств можно использовать функцию Object.getOwnPropertyNames().) Свойства в массиве следуют в том же порядке, в каком они перечисляются циклом for/in.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

Пример

Object.keys({х:1, у:2}) // => [”х", "у"]

См. также

Object.getOwnPropertyNames(), разделы 5.5.4, 6.5

Object.preventExtensions() (ECMAScript 5)

предотвращает добавление в объект новых свойств

Синтаксис

Object.preventExtensions(o)

Аргументы

о Объект, который должен иметь расширяемый набор атрибутов.

Возвращаемое значение

Объект о с аргументами.

Описание

Функция Object.preventExtensions() присваивает значение false атрибуту extensible объекта о, вследствие чего в него нельзя будет добавлять новые свойства. Действие этой функции необратимо: нерасширяемый объект нельзя вновь сделать расширяемым.

Следует отметить, что Object.preventExtensions() не воздействует на цепочку прототипов, и нерасширяемый объект все еще можно расширить новыми наследуемыми свойствами.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

См. также

Object.freeze(), Object.isExtensible(), Object.seal(), раздел 6.8.3

Object.propertyIsEnumerable()

проверяет, будет ли свойство видимо для цикла for/in

Синтаксис

объект.propertyIsEnumerable(имя_свойства)

Аргументы

имя_свойства Строка, содержащая имя свойства объекта.

Возвращаемое значение

Возвращает true, если у объекта есть неунаследованное свойство с именем, указанным в аргументе имя_свойства, и если это свойство «перечислимое», т.е. оно может быть перечислено циклом for/in для объекта.

Описание

Инструкция for/in выполняет цикл по «перечислимым» свойствам объекта. Однако не все свойства объекта являются перечислимыми: свойства, добавленные в объект программным способом, перечислимы, а предопределенные свойства (например, методы) встроенных объектов обычно неперечислимы. Метод propertyIsEnumerable() позволяет установить различия между перечислимыми и неперечислимыми свойствами. Однако следует заметить: спецификация ECMAScript утверждает, что propertyIsEnumerable() не проверяет цепочку прототипов, т.е. этот метод годится только для локальных свойств объекта и не предоставляет способа для проверки перечисляемости унаследованных свойств.

Пример

var о = new Object(); // Создать объект
о.х = 3.14; // Определить свойство
о.propertyIsEnumerable(”х"); // true: х - локальное и перечислимое
о.propertyIsEnumerable("у"); // false о не имеет свойства у
о.propertyIsEnumerable("toString"); //false  toString унаследованное свойство
Object.prototype.propertyIsEnumerable("toString“); // false: неперечислимое

См. также

Function.prototype, Object.hasOwnProperty(); глава 6

Object.seal() (ECMAScript 5)

предотвращает добавление и удаление свойств

Синтаксис

Object.seal(o)

Аргументы

о Объект, который должен стать нерасширяемым, с недоступными для настройки свойствами.

Возвращаемое значение

Объект в аргументе о.

Описание

Функция Object.seal() делает объект о нерасширяемым (Object.preventExtensions()), а все его собственные свойства - ненастраиваемыми. Это предотвращает добваление новых свойств и удаление существующих. Действие этой функции необратимо: нерасширяемый объект с ненастраиваемыми свойствами нельзя вновь сделать расширяемым объектом.

Имейте в виду, что Object.seal() не делает свойства объекта доступными только для чтения; используйте для этого функцию Object.freeze(). Отметьте также, что Object.seal() не воздействует на унаследованные свойства. Если в цепочке прототипов объекта, обработанного функцией Object.seal(), имеется расширяемый и настраиваемый объект, тогда имеется возможность добавлять и удалять наследуемые им свойства.

Обратите внимание, что эта функция вызывается не как метод объекта: это глобальная функция, которая принимает объект в виде аргумента.

См. также

Object.defineProperty(), Object.freeze(), Object.isSealed(), Object.preventExtensions(), раздел 6.8.3

Object.toLocaleString()

возвращает локализованное строковое представление объекта

Синтаксис

объект.toLocaleString()

Возвращаемое значение

Строковое представление объекта.

Описание

Этот метод предназначен для получения строкового представления объекта, локализованного в соответствии с текущими региональными настройками. Метод toLocaleString(), предоставляемый по умолчанию классом Object, просто вызывает метод toString() и возвращает полученную от него нелокализованную строку. Однако обратите внимание, что другие классы, в том числе Array, Date и Number, определяют собственные версии этого метода для локализованного преобразования в строку. Вы также можете переопределить этот метод собственными классами.

См. также

Array.toLocaleString(), Date.toLocaleString(), Number.toLocaleString(), Object.toString()

Object.toString()

возвращает строковое представление объекта

Синтаксис

объект.toString()

Возвращаемое значение

Строка, представляющая объект.

Описание

Метод toString() относится к тем, которые обычно не вызываются явно в JavaScript-программах. Программист определяет этот метод в своих объектах, а система вызывает метод, когда требуется преобразовать объект в строку.

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

alert(my_object);

Подобным же образом объекты преобразуются в строки, когда они конкатенируются со строками с помощью оператора +:

var msg = 'Мой объект: ' + my_object;

Метод toString() вызывается без аргументов и должен возвращать строку. Чтобы от возвращаемой строки была какая-то польза, эта строка должна каким-либо образом базироваться на значении объекта, для которого был вызван метод.

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

[objectкласс]

где класс - это класс объекта: значение, такое как «Object», «String», «Number», «Function», «Window», «Document» и т.д. Такое поведение стандартного метода toString() иногда бывает полезно для определения типа или класса неизвестного объекта. Однако большинство объектов имеют собственную версию toString(), поэтому для произвольного объекта о необходимо явно вызывать метод Object.toString(), как показано ниже:

Object.prototype.toString.apply(o);

Обратите внимание, что этот способ идентификации неизвестных объектов годится только для встроенных объектов. Если вы определяете собственный класс объектов, то класс для него будет соответствовать значению «Object». В этом случае дополнительную информацию об объекте позволит получить свойство Object.constructor. Метод toString() может быть очень полезен при отладке JavaScript-программ - он позволяет выводить объекты и видеть их значения. По одной только этой причине есть смысл определять метод toString() для каждого создаваемого вами класса.

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

у = Math.sqrt(x); // Вычислить число
ystr = у.toString(); // Преобразовать его в строку

Относительно этого примера следует помнить, что числа имеют встроенный метод toString(), обеспечивающий принудительное преобразование.

В других случаях вызов toString() может оказаться полезным - даже в таком контексте, когда JavaScript выполняет преобразование автоматически. Явное использование метода toString() может сделать программный код более понятным:

alert(my_obj. toString());

См. также

Object.constructor), Object.toLocaleString(), Object.valueOf()

Object.valueOf()

элементарное значение указанного объекта

Синтаксис

объект.valueOf()

Возвращаемое значение

Элементарное значение, связанное с объектом, если оно есть. Если с объектом не связано значение, метод возвращает сам объект.

Описание

Метод valueOf() объекта возвращает элементарное значение, связанное с этим объектом, если оно есть. Для объектов типа Object элементарное значение отсутствует, и метод такого объекта возвращает сам объект.

Однако для объектов типа Number метод valueOf() возвращает элементарное числовое значение, представляемое объектом. Аналогично он возвращает элементарное логическое значение, связанное с объектом Boolean, или строку, связанную с объектом String.

Программисту редко приходится явно вызывать метод valueOf(). Интерпретатор JavaScript делает это автоматически всякий раз, когда встречает объект там, где ожидается элементарное значение. Из-за автоматического вызова метода valueOf() фактически трудно даже провести различие между элементарными значениями и соответствующими им объектами. Оператор typeof, например, показывает различие между строками и объектами String, но с практической точки зрения они работают в JavaScript-коде эквивалентным образом.

Метод valueOf() объектов Number, Boolean и String преобразует эти объекты-обертки в представляемые ими элементарные значения. Конструктор Object() выполняет противоположную операцию при вызове с числовым, логическим или строковым аргументом: он «заворачивает» элементарное значение в соответствующий объект-обертку. В большинстве случаев JavaScript берет это преобразование «элементарное значение - объект» на себя, поэтому необходимость в таком вызове конструктора Object() возникает редко.

Иногда программисту требуется определить специальный метод valueOf() для собственных объектов. Например, определить объектный JavaScript-тип для представления комплексных чисел (вещественное число плюс мнимое число). Как часть этого объектного типа, можно определить методы для выполнения комплексного сложения, умножения и т.д. Еще может потребоваться возможность рассматривать комплексные числа как обычные вещественные путем отбрасывания мнимой части. Для этого можно сделать примерно следующее:

Complex.prototype.valueOf = new Function("return this.real");

Определив метод valueOf() для собственного объектного типа Complex, можно, например, передавать объекты комплексных чисел в функцию Math.sqrt(), которая вычислит квадратный корень из вещественной части комплексного числа.

См. также

Object. toString()

parseFloat()

преобразует строку в число

Синтаксис

parseFloat(s)

Аргументы

s Строка для синтаксического разбора, которая должна быть преобразована в число.

Возвращаемое значение

Возвращает выделенное из строки число или NaN, если s не начинается с допустимого числа. В JavaScript 1.0, если строка s не может быть преобразована в число, parseFloat() возвращает 0 вместо NaN.

Описание

Функция parseFloat() выполняет синтаксический разбор строки и возвращает первое число, найденное в s. Разбор прекращается и значение возвращается, когда parseFloat() встречает в s символ, который не является допустимой частью числа. Если s не начинается с числа, которое parseFloat() может разобрать, функция возвращает значение NaN. Проверка на это возвращаемое значение выполняется функцией isNaN(). Чтобы выделить только целую часть числа, используется функция parseInt(), а не parseFloat().

См. также

isNaN(), parseInt()

parseInt()

преобразует строку в целое число

Синтаксис

parseInt(s)
parseInt(s, основание)

Аргументы

s

Строка для синтаксического разбора.

основание

Необязательный целочисленный аргумент, представляющий основание системы счисления анализируемого числа. Если этот аргумент отсутствует или равен 0, извлекается десятичное или шестнадцатеричное (если число начинается с префикса «0х» или «0Х») число. Если этот аргумент меньше 2 или больше 36, parseInt() возвращает NaN.

Возвращаемое значение

Возвращается извлекаемое число (NaN, если s не начинается с корректного целого). В JavaScript 1.0, если невозможно выполнить синтаксический разбор строки s, parseInt() возвращает 0 вместо NaN.

Описание

Функция parseInt() выполняет синтаксический разбор строки s и возвращает первое число (с необязательным начальным знаком «минус»), найденное в s. Разбор останавливается и значение возвращается, когда parseInt() встречает в s символ, не являющийся допустимой цифрой для указанного основания. Если s не начинается с числа, которое может быть проанализировано функцией parseInt(), функция возвращает значение NaN. Проверка на это возвращаемое значение выполняется функцией isNaN(). Аргумент основание задает основание извлекаемого числа. При основании, равном 10, parseInt() извлекает десятичное число. Если этот аргумент равен 8, то извлекается восьмеричное число (состоящее из цифр от 0 до 7), а если 16 - шестнадцатеричное (цифры от 0 до 9 и буквы от А до F). Аргумент основание может быть любым числом от 2 до 36.

Если основание равно 0 или не указано, parseInt() пытается определить систему счисления по строке s. Если s начинается (после необязательного знака «минус») с префикса «Ох», parseInt() разбирает оставшуюся часть s как шестнадцатеричное число. Во всех остальных случаях parseInt() разбирает строку как десятичное число.

Пример

parseInt("19", 10); // Вернет 19 (10 + 9)
parseInt("11", 2); // Вернет 3 (2 + 1)
parseInt("17", 8);// Вернет 15 (8 + 7)
parseInt("1f", 16);// Вернет 31 (16 + 15)
parseInt("10"); // Вернет 10
parseInt("0x10"); // Вернет 16

См. также

isNaN(), parseFloat()

Оглавление книги


Генерация: 0.124. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз