объект Object

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

Синтаксис

obj = new Object(value) 

Параметры

obj
Обязательный. Имя переменной, которой присваивается объект Object.
value
Необязательный. Любой из примитивных типов данных JavaScript (число, логическое значение или строка). Если параметр value является объектом, объект возвращается без изменений. Если параметр value имеет значение null, не определен или не указан, создается объект без содержимого.

Комментарии

Объект Object присутствует во всех остальных объектах JavaScript; все его методы и свойства доступны во всех остальных объектах. Методы могут заново определяться в пользовательских объектах и вызываются JavaScript в соответствующее время. Метод toString является примером часто переопределяемого метода Object.

Все методы и свойства объекта Object доступны для всех объектов.

Свойства

Методы

МетодОписание
constructorСсылается на функцию-конструктор, которая была использована при создании объекта.
prototypeСсылается на объект, являющийся прототипом для объектов типа Object. Данное свойство используется интерпретатором, когда функция используется как конструктор при создании нового объекта. Любой объект, созданный с помощью конструктора, наследует все свойства объекта, на который ссылается свойство prototype.

Функции

ФункцииОписание
create()Создает объект с указанным прототипом, и, при необходимости, содержащий указанные свойства.
defineProperties()Добавляет одно или несколько свойств в объект или изменяет уже существующие свойства.
defineProperty()Добавляет свойство в объект или изменяет уже существующее.
entries()Возвращает массив, содержащий имена всех перечисляемых свойств данного объекта.
freeze()Замораживает объект: предотвращает изменение значений существующих свойств и исключает добавление новых свойств.
fromEntries()Преобразует список пар ключ-значение в объект.
getOwnPropertyDescriptor()Возвращает описание данных свойства или метода.
getOwnPropertyNames()Возвращает массив, содержащий имена всех перечисляемых и неперечисляемых свойств и методов данного объекта.
getPrototypeOf()Возвращает прототип указанного объекта.
hasOwnProperty()Возвращает значение true, только если свойство с заданным именем существует в экземпляре объекта, а не прототипе.
isExtensible()Возвращает значение, указывающее, могут ли быть добавлены новые свойства в объект.
isFrozen()Возвращает значение true, если объект был заморожен.
isPrototypeOf()Возвращает логическое значение, указывающее является ли передаваемый объект частью цепочки прототипов для текущего объекта.
isSealed()Возвращает значение true, если объект был запечатан.
keys()Возвращает массив, содержащий имена всех перечисляемых свойств данного объекта.
preventExtensions()Предотвращает добавление новых свойств в объект.
seal()Запечатывает объект: предотвращает возможность удаление, изменения и добавления свойств объекта.
toLocaleString()Возвращает строку, представляющую объект. Этот метод предназначен для переопределения в производных объектах для языкового стандарта конкретных целей.
toString()Возвращает строку, представляющую объект.
valueOf()Возвращает примитивное значение указанного объекта.
values()Возвращает массив, содержащий значения всех перечисляемых свойств данного объекта.

constructor

Задает функцию, которая создает объект.

Синтаксис

object.constructor

Комментарии

Необходимый параметр object представляет собой имя объекта или функции.

Свойство constructor является членом прототипа каждого объекта, у которого есть прототип. Это включает все встроенные объекты JavaScript, за исключением объектов Global и Math. Свойство constructor содержит ссылку на функцию, которая создает экземпляры данного конкретного объекта.

Пример

В следующем примере кода демонстрируется использование свойства constructor.

// A constructor function.
function MyObj() {
    this.number = 1;
}
var x = new String("Hi");
if (x.constructor == String)
    alert("Object is a String.");
var y = new MyObj;
if (y.constructor == MyObj)
    alert("Object constructor is MyObj.");
// Output:
// Object is a String.
// Object constructor is MyObj.

prototype

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

Синтаксис

objectName.prototype

Описание, комментарии, примеры

Аргумент objectName представляет собой имя объекта.

Свойство prototype используется для предоставления базового набора функциональных возможностей классу объектов. Новые экземпляры объекта наследуют поведение прототипа, присвоенного этому объекту.

Например, чтобы добавить в объект Array метод, возвращающий значение наибольшего элемента массива, объявите функцию, добавьте ее в свойство Array.prototype, а затем используйте ее.

function array_max( ){
    var i, max = this[0];
    for (i = 1; i < this.length; i++)
    {
    if (max < this[i])
    max = this[i];
    }
    return max;
}
Array.prototype.max = array_max;
var myArray = new Array(7, 1, 3, 11, 25, 9
);
alert(myArray.max());
// Output:
// 25


Все встроенные объекты JavaScript имеют свойство prototype, которое доступно только для чтения. К прототипу можно добавлять свойства и методы, но невозможно присвоить объекту другой прототип. Однако пользовательским объектам можно присваивать новый прототип.

create

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

Синтаксис

Object.create(prototype, descriptors)

Параметры

prototype
Обязательное. Объект для использования в качестве прототипа. Может принимать значение null.
descriptors
Необязательный параметр. Объект JavaScript, содержащий один или несколько дескрипторов свойств.

Свойство данных — это свойство, которое может получать и задавать значение. Дескриптор свойства данных содержит атрибут value, а также атрибуты writable, enumerable и configurable. Если последние 3 атрибута не заданы, по умолчанию они получают значение false. Свойство метода доступа вызывает предоставленную пользователем функцию при каждом получении или задании значения. Дескриптор свойства метода доступа содержит атрибут set, атрибут get или оба эти атрибута. Для получения дополнительной информации см. Object.defineProperty.

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

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

Исключения

Исключение TypeError создается при выполнении любого из следующих условий:

Комментарии

Эту функцию можно использовать с параметром null prototype, чтобы прекратить использование цепи прототипов. Созданный объект не будет иметь прототипа.

Примеры

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

var newObj = Object.create(null, {
            size: {
                value: "large",
                enumerable: true
            },
            shape: {
                value: "round",
                enumerable: true
            }
        });
alert(
	newObj.size + '\n'+
	newObj.shape + '\n'+
	Object.getPrototypeOf(newObj));
// Output:
// large
// round
// null


В следующем примере создается объект, имеющий тот же внутренний прототип, что и объект Object. Как видно, он имеет тот же прототип, что и объект, созданный с использованием литерала объекта. Функция Object.getPrototypeOf получает прототип исходного объекта. Чтобы получить дескриптор свойства объекта, можно использовать функцию Object.getOwnPropertyDescriptor.

var firstLine = { x: undefined, y: undefined };
var secondLine = Object.create(Object.prototype, {
        x: {
                value: undefined, 
                writable: true, 
                configurable: true, 
                enumerable: true
            },
            y: {
                value: undefined, 
                writable: true, 
                configurable: true, 
                enumerable: true
            }
});
alert(
	"first line prototype = " + Object.getPrototypeOf(firstLine) + '\n'+
	"second line prototype = " + Object.getPrototypeOf(secondLine));

// Output:
// first line prototype = [object Object]
// second line prototype = [object Object]


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

// Create the shape object.
var Shape = { twoDimensional: true, color: undefined, hasLineSegments: undefined };
var Square = Object.create(Object.getPrototypeOf(Shape)); 

defineProperties

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

Синтаксис

object.defineProperties(object, descriptors)

Параметры

object
Обязательный параметр. Объект, для которого добавляется или изменяется свойства. Это может быть собственным объектом JavaScript или объектом DOM.
descriptors
Обязательный параметр. Объект JavaScript, содержащий один или несколько объектов дескриптора. Каждый объект дескриптора описывает свойство данных или свойство доступа.

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

Объект, переданный функции.

Комментарии

Аргумент descriptors представляет собой объект, содержащий один или несколько объектов дескриптора.

Свойство данных — это свойство, которое может хранить и извлекать значения. Дескриптор свойства данных содержит атрибут value, атрибут writable или их обоих. Для получения дополнительной информации см. Свойства данных и свойства доступа.

Свойство доступа вызывает предоставленную пользователем функцию каждый раз, когда происходит установка или извлечение значения свойства. Дескриптор свойства доступа содержит атрибут set, атрибут get или их обоих.

Если объект уже имеет свойство с указанными именем, то атрибуты свойства изменяются. Для получения дополнительной информации см. defineProperty.

Для создания объекта и добавления свойств к новому объекту можно использовать фнкцию create.

Примеры

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

В примере используется литерал объекта для создания объекта descriptors с объектами дескриптора newDataProperty и newAccessorProperty.

var newLine = '\n', str='';
var obj = {};
Object.defineProperties(obj, {
    newDataProperty: {
        value: 101,
        writable: true,
        enumerable: true,
        configurable: true
    },
    newAccessorProperty: {
        set: function (x) {
            str += "in property set accessor" + newLine;
            this.newaccpropvalue = x;
        },
        get: function () {
            str += "in property get accessor" + newLine;
            return this.newaccpropvalue;
        },
        enumerable: true,
        configurable: true
    }});

// Set the accessor property value.
obj.newAccessorProperty = 10;
str += "newAccessorProperty value: " + obj.newAccessorProperty + newLine;
alert (str)

// Output:
// in property set accessor
// in property get accessor
// newAccessorProperty value: 10


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

var newLine = '\n'; str='';
// Create the descriptors object.
var descriptors = new Object();

// Add a data property descriptor to the descriptors object.
descriptors.newDataProperty = new Object();
descriptors.newDataProperty.value = 101;
descriptors.newDataProperty.writable = true;
descriptors.newDataProperty.enumerable = true;
descriptors.newDataProperty.configurable = true;

// Add an accessor property descriptor to the descriptors object.
descriptors.newAccessorProperty = new Object();
descriptors.newAccessorProperty.set = function (x) {
    str += "in property set accessor" + newLine;
    this.newaccpropvalue = x;
};
descriptors.newAccessorProperty.get = function () {
    str += "in property get accessor" + newLine;
    return this.newaccpropvalue;
};
descriptors.newAccessorProperty.enumerable = true;
descriptors.newAccessorProperty.configurable = true;

// Call the Object.defineProperties function.
var obj = new Object();
Object.defineProperties(obj, descriptors);

// Set the accessor property value.
obj.newAccessorProperty = 10;
str += "newAccessorProperty value: " + obj.newAccessorProperty + newLine;
alert(str);

// Output:
// in property get accessor
// newAccessorProperty value: 10


Чтобы изменить атрибуты свойства для объекта, добавьте следующий код. Функция Object.defineProperties изменяет атрибут writable объекта дескриптора newDataProperty и атрибут enumerable объекта дескриптора newAccessorProperty. Она добавляет anotherDataProperty к объекту, поскольку это имя свойства еще не существует.

Object.defineProperties(obj, {
    newDataProperty: { writable: false },
    newAccessorProperty: { enumerable: false },
    anotherDataProperty: { value: "abc" }
});

defineProperty

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

Синтаксис

Object.defineProperty(object, propertyname, descriptor)

Параметры

object
Обязательный. Объект, для которого нужно добавить или изменить свойство. Это может быть собственный объект JavaScript (встроенный или определяемый пользователем) или объект DOM.
propertyname
Обязательный. Строка, содержащая имя свойства.
descriptor
Обязательный. Дескриптор свойства. Это может быть свойство данных или свойство метода доступа.

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

Измененный объект.

Комментарии

Функцию defineProperty можно использовать для выполнения следующих задач:

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

Добавить или изменить сразу несколько свойств позволяет Функция defineProperties.

Исключения

Исключение TypeError возникает при выполнении любого из следующих условий:

Примеры

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

var newLine = "\n", str='';
// Create a user-defined object.
var obj = {};

// Add a data property to the object.
Object.defineProperty(obj, "newDataProperty", {
    value: 101,
    writable: true,
    enumerable: true,
    configurable: true
});

// Set the property value.
obj.newDataProperty = 102;
str += "Property value: " + obj.newDataProperty + newLine;

// вывести список свойств объекта
var names = Object.getOwnPropertyNames(obj);
for (var i = 0; i < names.length; i++) {
    var prop = names[i];
   str += prop + ': ' + obj[prop]+'\n';
}

// Изменение свойства данных
// Modify the writable attribute of the property.
Object.defineProperty(obj, "newDataProperty", { writable: false });

// List the property attributes by using a descriptor.
// Get the descriptor with Object.getOwnPropertyDescriptor.
var descriptor = Object.getOwnPropertyDescriptor(obj, "newDataProperty");
for (var prop in descriptor) {
    str += prop + ': ' + descriptor[prop]+'\n';
}

alert (str);  /* 
Output:
 Property value:  102
 newDataProperty: 102
 writable: false
 value: 102
 configurable: true
 enumerable: true */


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

var newLine = "\n", str='';

// Create a user-defined object.
var obj = {};

// Add an accessor property to the object.
Object.defineProperty(obj, "newAccessorProperty", {
    set: function (x) {
        str += "in property set accessor" + newLine;
        this.newaccpropvalue = x;
    },
    get: function () {
        str += "in property get accessor" + newLine;
        return this.newaccpropvalue;
    },
    enumerable: true,
    configurable: true
});

// Set the property value.
obj.newAccessorProperty = 30;
str += "Property value: " + obj.newAccessorProperty + newLine;

//   Изменить атрибут свойства для объекта
//   Параметр descriptor содержит только определение метода доступа get.
//   Другие атрибуты свойства остаются неизменными.
// Modify the get accessor.
Object.defineProperty(obj, "newAccessorProperty", {
    get: function () { return this.newaccpropvalue; }
});

// List the property attributes by using a descriptor.
// Get the descriptor with Object.getOwnPropertyDescriptor.
var descriptor = Object.getOwnPropertyDescriptor(obj, "newAccessorProperty");
for (var prop in descriptor) {
    str += prop + ': ' + descriptor[prop] + '\n';
}

alert (str); /*

Output:
 in property set accessor
 in property get accessor
 Property value: 30
 get: function () { return this.newaccpropvalue; }
 set: function (x) { str += "in property set accessor" + newLine; this.newaccpropvalue = x; }
 configurable: true
 enumerable: true */



В следующем примере показано, как с помощью функции getOwnPropertyDescriptor настраивать встроенные свойства DOM для получения и изменения дескриптора свойства для свойства. В данном случае код должен содержать элемент DIV с идентификатором div.

// Get the querySelector property descriptor.
var descriptor = Object.getOwnPropertyDescriptor(Element.prototype, "querySelector");

// Make the property read-only.
descriptor.value = "query";
descriptor.writable = false;

// Apply the changes to the Element prototype.
Object.defineProperty(Element.prototype, "querySelector", descriptor);

// Get a DOM element from the HTML body.
var elem = document.getElementById("div");

// Attempt to change the value. This causes the revised value attribute to be called.
elem.querySelector = "anotherQuery";
alert(elem.querySelector);

// Output:
// query

entries

Возвращает массив собственных перечисляемых свойств указанного объекта в формате [key, value].

Синтаксис

Object.entries(object)

Параметры

object
Обязательный. Объект, чьи перечислимые свойства будут возвращены в виде массива [key, value]

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

Object.entries() возвращает массив, элементами которого являются массивы, соответствующие перечисляемому свойству пары [key, value], найденной прямо в object. Порядок свойств тот же, что и при прохождении циклом по свойствам объекта вручную.

Пример

let obj = { foo: "bar", baz: 42 };

// Преобразование Object в Map
let  map = new Map(Object.entries(obj));

alert( Object.entries(obj) +  // [ ['foo', 'bar'], ['baz', 42] ]

    '\n' + map ); 

freeze

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

Синтаксис

Object.freeze(object)

Параметры

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

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

Объект, переданный функции.

Если аргумент object не является объектом, вызывается исключение TypeError.

Описание, комментарии, примеры

Функция freeze выполняет следующие действия.

Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor


Следующие связанные функции предотвращают изменение атрибутов объекта.

functionОбъект становится нерасширяемым.configurable получает значение false для каждого свойстваwritable получает значение false для каждого свойства
preventExtensionsДаНетНет
sealДаДаНет
freezeДаДаДа


Следующие функции возвращают true, если все условия, отмеченные в следующей таблице, имеют значение true.

functionРасширяем ли объект?configurable имеет значение false для всех свойств?writable имеет значение false для всех свойств данных?
isExtensibleДаНетНет
isSealedНетДаДа
isFrozenНетДаДа


В следующем примере показано использование функции freeze.

str='';
// Create an object that has two properties.
var obj = { pasta: "spaghetti", length: 10 };

// Freeze the object.
Object.freeze(obj);

// Try to add a new property, and then verify that it is not added. 
    obj.newProp = 50;
    str += obj.newProp+'\n';

// Try to delete a property, and then verify that it is still present. 
delete obj.length;
str += obj.length+'\n';

// Try to change a property value, and then verify that it is not changed. 
obj.pasta = "linguini";
str += obj.pasta+'\n';
alert(str);

// Output:
// undefined
// 10
// spaghetti

fromEntries

Метод Object.fromEntries() преобразует список пар ключ-значение в объект.

Синтаксис

Object.fromEntries(iterable)

Параметры

iterable
Обязательный. Итерируемый объект, такой как Array или Map или другие объекты, реализующие iterable протокол.

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

Новый объект, свойства которого задаются записями iterable

Описание, комментарии, примеры

Итераторы применяются для организации последовательного доступа к элементам наборов данных - массивам, объектам Set, Map, строкам и т.д..Так, благодаря итераторам мы можем перебрать набор данных с помощью цикла for...of

Object.fromEntries() выполняет процедуру, обратную Object.entries()

const entries = new Map([
  ['foo', 'bar'],
  ['baz', 42]
]);
const obj = Object.fromEntries(entries);
let s='';
for (let p in obj) {
  s += p+': ' + obj[p]+'\n';
}
alert (s);

getOwnPropertyDescriptor

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

Синтаксис

Object.getOwnPropertyDescriptor(object, propertyname)

Параметры

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

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

Дескриптор свойства.

Комментарии

Функция getOwnPropertyDescriptor позволяет получить объект дескриптора, описывающий атрибуты свойства.

Функция defineProperty используется для добавления или изменения свойств.

Примеры



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

// Create a user-defined object.
var obj = {}, str='';

// Add a data property.
obj.newDataProperty = "abc";

// Get the property descriptor.
var descriptor = Object.getOwnPropertyDescriptor(obj, "newDataProperty");

// Change a property attribute.
descriptor.writable = false;
Object.defineProperty(obj, "newDataProperty", descriptor);

// Чтобы вывести список атрибутов свойства, добавим следующий код.

// Get the descriptor from the object.
var desc2 = Object.getOwnPropertyDescriptor(obj, "newDataProperty");

// List the descriptor attributes.
for (var prop in desc2) {
    str += prop + ': ' + desc2[prop] + '\n';
}
alert(str);

// Output:
// value: abc
// writable: false
// enumerable: true
// configurable: true

getOwnPropertyNames

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

Синтаксис

Object.getOwnPropertyNames(object)

Параметры

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

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

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

Если значение, заданное для аргумента object не является именем объекта, возникает исключение TypeError.

Комментарии

Метод getOwnPropertyNames возвращает имена как перечислимых, так и неперечислимых свойств и методов. Чтобы вернуть имена только перечислимых свойств и методов, можно использовать keys.

Примеры

В следующем примере создается объект, имеющий три свойства и метод. Затем используется метод getOwnPropertyNames для получения собственных свойств (включая метод) объекта.

var str='';
function Pasta(grain, width, shape) {
    // Define properties.
    this.grain = grain;
    this.width = width;
    this.shape = shape;
    this.toString = function () {
        return (this.grain + ", " + this.width + ", " + this.shape);
    }
}

// Create an object.
var spaghetti = new Pasta("wheat", 0.2, "circle");

// Get the own property names.
var arr = Object.getOwnPropertyNames(spaghetti);
alert (arr);

// Output:
//   grain,width,shape,toString


В следующем примере отображаются имена свойств, начинающиеся с буквы "s" объекта spaghetti, созданного с помощью конструктора Pasta.

var str='';
function Pasta(grain, size, shape) {
    this.grain = grain; 
    this.size = size; 
    this.shape = shape; 
}
var spaghetti = new Pasta("wheat", 2, "circle");
var names = Object.getOwnPropertyNames(spaghetti).filter(CheckKey);
str += names + '\n'; 

// Check whether the first character of a string is 's'. 
function CheckKey(value) {
    var firstChar = value.substr(0, 1); 
    if (firstChar.toLowerCase() == 's')
        return true; 
    else
         return false; 
}
alert (str);

// Output:
// size,shape

getPrototypeOf

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

Синтаксис

Object.getPrototypeOf(object)

Параметры

object
Обязательный. Объект, который ссылается на прототип.

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

Прототип аргумента object. Прототип также является объектом.

Если аргумент object не является объектом, вызывается исключение TypeError.

Примеры

В следующем примере показано использование функции getPrototypeOf.

var str='';
// Create a constructor function.
function Pasta(grain, width) {
    this.grain = grain;
    this.width = width;
}

// Create an object from the pasta constructor.
var spaghetti = new Pasta("wheat", 0.2);

// Obtain the prototype from the object.
var proto = Object.getPrototypeOf(spaghetti);

// Add a property to the prototype and validate that
// the original object has the property.
proto.foodgroup = "carbohydrates";
str += spaghetti.foodgroup + " ";

// Verify that the prototype obtained from the object
// is the same as the prototype of the constructor.
var result = (proto === Pasta.prototype);
str += result + " ";

// Verify that prototype obtained from the object
// is a prototype of the original object.
var result = proto.isPrototypeOf(spaghetti);
str += result + '\n';
alert (str);

// Output: carbohydrates true true


В следующем примере функция getPrototypeOf используется для проверки типов данных.

var reg = /a/, str='';
var result = (Object.getPrototypeOf(reg) === RegExp.prototype);
str += result + " ";
var err = new Error("an error");
var result = (Object.getPrototypeOf(err) === Error.prototype);
str += result;
alert(str);
// Output: true true

isExtensible

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

Синтаксис

Object.isExtensible(object)

Параметры

object
Обязательный. Объект для проверки.

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

Значение true, если объект является расширяемым, т. е. к объекту можно добавлять новые свойства; в противном случае — значение false.

Если аргумент object не является объектом, вызывается исключение TypeError.

Описание, комментарии, примеры

Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.


Следующие связанные функции предотвращают изменение атрибутов объекта.

functionОбъект становится нерасширяемым.configurable получает значение false для каждого свойстваwritable получает значение false для каждого свойства
preventExtensionsДаНетНет
sealДаДаНет
freezeДаДаДа


Следующие функции возвращают true, если все условия, отмеченные в следующей таблице, имеют значение true.

functionРасширяем ли объект?configurable имеет значение false для всех свойств?writable имеет значение false для всех свойств данных?
isExtensibleДаНетНет
isSealedНетДаДа
isFrozenНетДаДа


В следующем примере показано использование функции isExtensible.

// Create an object that has two properties.
var obj = { pasta: "spaghetti", length: 10 };
// Make the object non-extensible.
Object.preventExtensions(obj);
// Try to add a new property, and then verify that it is not added.
obj.newProp = 50;
alert(obj.newProp);
// Output:
undefined

isFrozen

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

Синтаксис

Object.isFrozen(object)

Параметры

object
Обязательный. Объект для проверки.

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

Значение true, если выполняются все следующие условия:

Если объект не имеет свойств, функция возвращает значение true, если объект не является расширяемым.

Если аргумент object не является объектом, вызывается исключение TypeError.

Описание, комментарии, примеры

Если атрибут configurable свойства имеет значение false, атрибуты свойства невозможно изменить, а свойство не может быть удалено. Когда атрибут writable имеет значение false, значение свойства данных изменить нельзя. Когда configurable имеет значение false, а writable имеет значение true, атрибуты value и writable можно изменить. Дополнительные сведения о задании атрибутов свойств см. defineProperty . Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.


Следующие связанные функции предотвращают изменение атрибутов объекта.

functionОбъект становится нерасширяемым.configurable получает значение false для каждого свойстваwritable получает значение false для каждого свойства
preventExtensionsДаНетНет
sealДаДаНет
freezeДаДаДа


Следующие функции возвращают true, если все условия, отмеченные в следующей таблице, имеют значение true.

functionРасширяем ли объект?configurable имеет значение false для всех свойств?writable имеет значение false для всех свойств данных?
isExtensibleДаНетНет
isSealedНетДаДа
isFrozenНетДаДа


В следующем примере показано использование функции isFrozen.

var str='';
// Create an object that has two properties.
var obj = { pasta: "spaghetti", length: 10 };

// Freeze the object, and verify that it is frozen.
Object.freeze(obj);
str += Object.isFrozen(obj) + '\n';

// Try to add a new property, and then verify that it is not added. 
obj.newProp = 50;
str += obj.newProp + '\n';

// Try to delete a property, and then verify that it is still present.
delete obj.length;
str += obj.length + '\n';

// Try to change a property value, and then verify that it is not changed.
obj.pasta = "linguini";
str += obj.pasta;
alert (str);

// Output:
// true
// undefined
// 10
// spaghetti

isSealed

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

Синтаксис

Object.isSealed(object)

Параметры

object
Обязательный. Объект для проверки.

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

Значение true, если выполняются оба из следующих условий:

Если объект не имеет свойств, функция возвращает значение true, если объект не является расширяемым.

Если аргумент object не является объектом, вызывается исключение TypeError.

Описание, комментарии, примеры

Если атрибут configurable свойства имеет значение false, атрибуты свойства невозможно изменить, а свойство не может быть удалено. Когда атрибут writable имеет значение false, значение свойства данных изменить нельзя. Когда configurable имеет значение false, а writable имеет значение true, атрибуты value и writable можно изменить.

Функция isSealed не использует атрибут writable свойств для определения возвращаемого значения.

Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.


Следующие связанные функции предотвращают изменение атрибутов объекта.

functionОбъект становится нерасширяемым.configurable получает значение false для каждого свойстваwritable получает значение false для каждого свойства
preventExtensionsДаНетНет
sealДаДаНет
freezeДаДаДа


Следующие функции возвращают true, если все условия, отмеченные в следующей таблице, имеют значение true.

functionРасширяем ли объект?configurable имеет значение false для всех свойств?writable имеет значение false для всех свойств данных?
isExtensibleДаНетНет
isSealedНетДаДа
isFrozenНетДаДа


В следующем примере показано использование функции isSealed.

var str='';
// Create an object that has two properties.
var obj = { pasta: "spaghetti", length: 10 };
// Seal the object, and verify that it is sealed.
Object.seal(obj);
str += Object.isSealed(obj) + '\n';
// Try to add a new property, and then verify that it is not added. 
obj.newProp = 50;
str += obj.newProp + '\n';
// Try to delete a property, and then verify that it is still present. 
delete obj.length;
str += obj.length + '\n';
alert (str);
// Output:
// true
// undefined
// 10

keys

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

Синтаксис

Object.keys(object)

Параметры

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

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

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

Если значение, заданное для аргумента object не является именем объекта, возникает исключение TypeError.

Описание, комментарии, примеры

Метод keys возвращает имена только перечислимых свойств и методов. Для возвращения имен как перечислимых, так и неперечислимых свойств и методов можно использовать getOwnPropertyNames.

Дополнительные сведения о свойстве enumerable см. defineProperty и getOwnPropertyDescriptor.



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

// Create a constructor function.
function Pasta(grain, width, shape) {
    this.grain = grain;
    this.width = width;
    this.shape = shape;
    // Define a method.
    this.toString = function () {
        return (this.grain + ", " + this.width + ", " + this.shape);
    }
}
// Create an object.
var spaghetti = new Pasta("wheat", 0.2, "circle");
// Put the enumerable properties and methods of the object in an array.
var arr = Object.keys(spaghetti);
alert (arr);
// Output:
// grain,width,shape,toString


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

// Create a constructor function.
function Pasta(grain, width, shape) {
    this.grain = grain;
    this.width = width;
    this.shape = shape;
}
var polenta = new Pasta("corn", 1, "mush");
var keys = Object.keys(polenta).filter(CheckKey);
alert(keys);
// Check whether the first character of a string is "g".
function CheckKey(value) {
    var firstChar = value.substr(0, 1);
    if (firstChar.toLowerCase() == "g")
        return true;
    else
        return false;
}
// Output:
// grain

preventExtensions

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

Синтаксис

Object.preventExtensions(object)

Параметры

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

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

Объект, переданный функции.

Если аргумент object не является объектом, вызывается исключение TypeError.

Описание, комментарии, примеры

Функция preventExtensions делает объект нерасширяемым, чтобы к нему невозможно было добавить новые именованные свойства. После того как объект сделан нерасширяемым, его нельзя сделать расширяемым.

Дополнительные сведения о задании атрибутов свойств см. defineProperty.


Следующие связанные функции предотвращают изменение атрибутов объекта.

functionОбъект становится нерасширяемым.configurable получает значение false для каждого свойстваwritable получает значение false для каждого свойства
preventExtensionsДаНетНет
sealДаДаНет
freezeДаДаДа


Следующие функции возвращают true, если все условия, отмеченные в следующей таблице, имеют значение true.

functionРасширяем ли объект?configurable имеет значение false для всех свойств?writable имеет значение false для всех свойств данных?
isExtensibleДаНетНет
isSealedНетДаДа
isFrozenНетДаДа


В следующем примере показано использование функции preventExtensions.

var str='';
// Create an object that has two properties.
var obj = { pasta: "spaghetti", length: 10 };
// Make the object non-extensible.
Object.preventExtensions(obj);
str += Object.isExtensible(obj) + '\n';
// Try to add a new property, and then verify that it is not added.
obj.newProp = 50;
str += obj.newProp + '\n';
alert (str);
// Output:
// false
// undefined

seal

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

Синтаксис

Object.seal(object)

Параметры

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

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

Объект, переданный функции.

Если аргумент object не является объектом, вызывается исключение TypeError.

Описание, комментарии, примеры

Функция seal выполняет оба из следующих действий:

Если атрибут configurable имеет значение false, атрибуты свойства невозможно изменить, а свойство не может быть удалено. Когда configurable имеет значение false, а writable имеет значение true, атрибуты value и writable можно изменить.

Функция seal не изменяет атрибут writable.

Дополнительные сведения о задании атрибутов свойств см. defineProperty. Чтобы получить атрибуты свойства, можно использовать функцию getOwnPropertyDescriptor.


Следующие связанные функции предотвращают изменение атрибутов объекта.

functionОбъект становится нерасширяемым.configurable получает значение false для каждого свойстваwritable получает значение false для каждого свойства
preventExtensionsДаНетНет
sealДаДаНет
freezeДаДаДа


Следующие функции возвращают true, если все условия, отмеченные в следующей таблице, имеют значение true.

functionРасширяем ли объект?configurable имеет значение false для всех свойств?writable имеет значение false для всех свойств данных?
isExtensibleДаНетНет
isSealedНетДаДа
isFrozenНетДаДа


В следующем примере показано использование функции seal.

var str='';
// Create an object that has two properties.
var obj = { pasta: "spaghetti", length: 10 };
// Seal the object.
Object.seal(obj);
str += Object.isSealed(obj) + '\n';
// Try to add a new property, and then verify that it is not added. 
obj.newProp = 50;
str += obj.newProp + '\n';
// Try to delete a property, and then verify that it is still present. 
delete obj.length;
str += obj.length + '\n';
alert (str);
// Output:
// true
// undefined
// 10

hasOwnProperty

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

Синтаксис

object.hasOwnProperty(proName)

Параметры

object
Обязательное. Экземпляр объекта.
proName
Обязательное. Строковое значение имени свойства.

Комментарии

Метод hasOwnProperty возвращает значение true, если объект object имеет свойство с указанным именем, и значение false в противном случае. Данный метод не проверяет свойства в цепочке прототипов объекта; свойство должно быть членом самого объекта.

Это свойство не поддерживается для объектов узла для Internet Explorer 8 и ниже.

Пример

В следующем примере все объекты String используют общий метод split. Следующий код выводит значение false и true.

var str='';
var s = new String("Sample");
str += s.hasOwnProperty("split") + '\n';
str += String.prototype.hasOwnProperty("split") + '\n';
alert (str);
// Output:
// false
// true

isPrototypeOf

Определяет, существует ли объект в цепочке прототипов другого объекта.

Синтаксис

prototype.isPrototypeOf(object)

Параметры

prototype
Обязательный. Прототип объекта.
object
Обязательный. Другой объект, цепочку прототипов которого требуется проверить.

Комментарии

Метод isPrototypeOf возвращает значение true, если object содержит prototype в своей цепочке прототипов. Цепочка прототипов служит для совместного использования функциональных возможностей несколькими экземплярами одного типа объектов. Метод isPrototypeOf возвращает значение false, если object не является объектом или если prototype отсутствует в цепочке прототипов объекта object.

Пример

В следующем примере показано использование метода isPrototypeOf.

function Rectangle() {
}
var rec = new Rectangle();
alert(Rectangle.prototype.isPrototypeOf(rec));
// Output: true

toLocaleString

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

Синтаксис

dateObj.toLocaleString()

Параметры

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

Комментарии

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

Для дат в диапазоне от 1601 до 1999 года нашей эры даты форматируются в соответствии с региональными стандартами, заданными в панели управления пользователя.

Для дат за пределами этого диапазона используется формат метода toString по умолчанию.

Например, в Соединенных Штатах для 5 января метод toLocaleString возвращает значение "01/05/96 00:00:00". В Европе для этой же даты он возвращает значение "05/01/96 00:00:00", потому что в европейской традиции дата ставится перед месяцем.

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

Пример

В следующем примере показано использование метода toLocaleString.

function toLocaleStrDemo(){   
   var d, s;                      //Declare variables.
   d = new Date();                //Create Date object.
   s = "Current setting is ";
   s += d.toLocaleString();       //Convert to current locale.
   return(s);                     //Return converted date
}
alert (toLocaleStrDemo());

toString

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

Синтаксис

objectname.toString([radix])

Параметры

objectname
Обязательный. Объект, для которого ищется строковое представление.
radix
Необязательный. Указывает основание для преобразования числовых значений в строки. Это значение используется только для чисел.

Комментарии

ToString метод входит в состав всех встроенные JavaScript объектов. Его поведение зависит от типа объекта.
ОбъектПоведение
МассивЭлементы Array преобразуются в строки. Результирующие строки объединяются, разделенных запятыми.
BooleanЕсли логическое значение — true, возвращает «true». В противном случае возвращает "false«.
Дата Возвращает текстовое представление даты.
Ошибка Возвращает строку, содержащую сообщение об ошибке.

Функция возвращает строку следующего вида, где functionname имя функции, toString был вызван метод:

function functionname( ) { [native code] }
Число Возвращает текстовое представление числа.
Строка Возвращает значение String объекта.

По умолчанию возвращает "[object objectname]", где objectname имя типа объекта.

Пример

Следующий пример иллюстрирует использование toString метода с аргументом основание системы счисления. Возвращаемое значение функции, показано ниже является таблицей преобразования основание системы счисления.

function CreateRadixTable (){  
   var s = "";  
  
   // Create table heading.  
   s += "Hex  Dec  Bin \n";  
  
   for (x = 0; x < 16; x++)  
   {  
      s += "   ";  
  
      // Convert to hexidecimal.  
      s += x.toString(16);  
      s += "     ";  
      if (x < 10) s += "  ";  
  
      // Convert to decimal.  
      s += x.toString(10);  
      s += "     ";  
  
      // Convert to binary.  
      s += x.toString(2);  
      s += "\n";  
   }  
  
   return(s);  
}
alert (CreateRadixTable () ); 

valueOf

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

Синтаксис

object.valueOf( )

Параметры

Обязательная ссылка object — это любой встроенный объект JavaScript.

Описание, комментарии, примеры

Метод valueOf определяется по-разному для каждого встроенного объекта JavaScript.

ОбъектВозвращаемое значение
ArrayВозвращает экземпляр массива.
BooleanЛогическое значение.
DateСохраненное значение времени, прошедшего после полуночи 1 января 1970 года (UTC) в миллисекундах.
functionСама функция.
NumberЧисловое значение.
ОбъектСам объект. Задано по умолчанию.
stringСтроковое значение.

У объектов Math и Error метод valueOf отсутствует.

values

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

Синтаксис

Object.values(object)

Параметры

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

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

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

Пример

let obj = { foo: "bar", baz: 42 };
let str = "Строка";

alert ( Object.values(obj) + '\n'+
  Object.values(str) ); // Аргумент, не являющийся объектом, будет приведён к объекту

Свойства данных и свойства доступа

Этот раздел содержит практически всю необходимую информацию о свойствах данных и свойствах метода доступа.

Свойства данных

Свойство данных — это свойство, которое может получать и задавать значение. Свойства данных содержат свойства value и writable в дескрипторах.

В следующей таблице перечислены атрибуты для дескриптора свойства данных.

Атрибут дескриптора
данных
Описаниеdefault
ЗначениеТекущее значение свойства.Undefined
writabletrue или false. Если writable имеет значение true, значение свойства можно изменить.false
enumerabletrue или false. Если enumerable имеет значение true, то свойство может быть перечислено с помощью оператора for…in.false
configurabletrue или false. Если атрибут configurable имеет значение true, атрибуты свойства можно изменить, а свойство может быть удалено.false

Если дескриптор не имеет атрибута value, writable, get или set, а заданное имя свойства не существует, то свойство данных добавляется.

Когда атрибут configurable имеет значение false, а writable имеет значение true, атрибуты value и writable можно изменить.


Свойства данных, добавленные без использования defineProperty

При добавлении свойства данных без использования функций defineProperty, defineProperties или create атрибуты writable, enumerable и configurable все получают значение true. После того как свойство добавлено, его можно изменить с помощью функции defineProperty.

Можно использовать следующие способы добавления свойства данных:

Свойства метода доступа

Свойство метода доступа вызывает предоставленную пользователем функцию при каждом задании или извлечении значения свойства. Дескриптор для свойства метода доступа содержит атрибут get, атрибут set или оба эти атрибута.

В следующей таблице перечислены атрибуты для дескриптора свойства метода доступа.

Атрибут дескриптора
метода доступа
Описаниеdefault
getФункция, возвращающая значение свойства. Функция не имеет параметров.Undefined
setФункция, задающая значение свойства. Она имеет один параметр, содержащий значение для присвоения.Undefined
enumerabletrue или false. Если enumerable имеет значение true, то свойство может быть перечислено с помощью оператора for…in.false
configurabletrue или false. Если атрибут configurable имеет значение true, атрибуты свойства можно изменить, а свойство может быть удалено.false

Если метод доступа get не определен и сделана попытка доступа к значению свойства, возвращается значение undefined. Если метод доступа set не определен и сделана попытка назначить значение свойству метода доступа, ничего не происходит.

Изменения свойств

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

Если атрибут configurable существующего свойства имеет значение false, то разрешено только изменение значения атрибута writable с true на false.

Можно изменить свойство данных на свойство метода доступа, и наоборот. Если сделать это, атрибуты configurable и enumerable, не заданные в дескрипторе, сохранятся в свойстве. Другие атрибуты, которые не заданы в дескрипторе, получают значения по умолчанию.

Можно последовательно определить настраиваемые свойства метода доступа с помощью нескольких вызовов функции defineProperty. Например, один вызов defineProperty может определить только метод доступа get. Последующий вызов для того же имени свойства может определить метод доступа set. Свойство тогда будет иметь два метода доступа: get и set.

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

Можно использовать seal и freeze, чтобы предотвратить изменение атрибутов свойства.

Использование конструкторов для определения типов

Конструктор — это функция, создающая экземпляр объекта Object определенного типа. Конструктор вызывается с помощью ключевого слова new. Ниже приведено несколько примеров конструкторов для встроенных объектов JavaScript и пользовательских объектов:

// Creates a generic object.
var myObject = new Object();

// Creates a Date object.
var myBirthday = new Date(1961, 5, 10);

// Creates a user defined object.
var myCar = new Car();

Конструктор функции содержит ключевое слово this, которое представляет собой ссылку на только что созданный пустой объект. Он инициализирует новый объект путем создания свойств и присвоения им начальных значений. После завершения работы конструктор возвращает ссылку на созданный объект.

Написание конструкторов

Объекты можно создавать с помощью оператора new совместно со стандартными функциями конструктора, такими как Object(), Date() и Function(). Также можно создавать пользовательские функции конструкторов, которые определяют собственные наборы свойств и методов. Ниже приведен пример пользовательского конструктора.

function Circle (xPoint, yPoint, radius) {
    this.x = xPoint;  // The x component of the center of the circle.
    this.y = yPoint;  // The y component of the center of the circle.
    this.r = radius;  // The radius of the circle.
}

При вызове конструктора Circle необходимо указать значения для центральной точки и радиуса круга. В результате создается объект Circle, содержащий три свойства. Ниже показано, как создается экземпляр объекта Circle.

var aCircle = new Circle(5, 11, 99);

Все объекты, созданные с помощью пользовательского конструктора, имеют тип object. В JavaScript имеется только шесть типов: object, function, string, number, boolean и undefined. Дополнительные сведения см. в разделе Оператор typeof