Объекты
Разделы:
Методы | Аргументы | Возвращает | Описание |
hasOwnProperty | строка — имя свойства | true — если у объекта есть такое собственное свойство, либо false | проверяет, есть ли у объекта собственное свойство, которое было указано в качестве аргумента |
Object.assign | 1) целевой объект 2) один или несколько объектов | получившийся объект | копирует все свойства перечисленных объектов в целевой |
Object.create | 1) объект 2) объект со своими дескрипторами свойств | новый объект с заданным прототипом и свойствами | создает объект и записывает в прототип переданный в параметре объект |
Object.setPrototypeOf | 1) объект, которому устанавливается новый прототип 2) новый прототип объекта либо null | объект с изменённым прототипом | устанавливает прототип (то есть внутреннее свойство [[Prototype]]) указанного объекта в другой объект или null |
Object.getOwnPropertySymbols | объект | массив всех символьных свойств | возвращает массив всех символьных свойств переданного объекта |
Object.keys | объект | массив собственных ключей | возвращает массив собственных ключей переданного объекта |
Object.values | объект | массив собственных значений | возвращает массив собственных значений переданного объекта |
Object.entries | объект | массив | возвращает массив пар [ключ, значение] |
Object.getPrototypeOf | объект | прототип | возвращает прототип (то есть, внутреннее свойство [[Prototype]]) указанного объекта |
Object.getOwnPropertyDescriptors | объект | все собственные дескрипторы свойств | возвращает все собственные дескрипторы свойств данного объекта |
Object.getOwnPropertyNames | объект | массив всех собственных строковых ключей | возвращает массив всех собственных строковых ключей. Не возвращает Symbols поля |
Reflect.ownKeys | объект | массив имён, а также Symbols собственных полей объекта | возвращает массив имён, а также Symbols собственных полей объекта |
Object.fromEntries | массив | объект, созданный из массива | преобразовывает массив в объект |
Проверки
♦ instanceof
(array instanceof Array)
Оператор instanceof проверяет, принадлежит ли объект к определённому классу.
const text = 'Это обычная строка';
const myString = new String();
text instanceof String
// return: false
myString instanceof String
// return: true
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
website instanceof Object
// return: true
♦ hasOwnProperty
objectName.hasOwnProperty(key)
Возвращает true, если у objectName есть собственное (не унаследованное) свойство с именем key.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
website.hasOwnProperty('toString')
// return: false
website.hasOwnProperty('domain')
// return: true
website.hasOwnProperty('url')
// return: true
// другой вариант проверки
'domain' in website
// return: true
Изменение
♦ Object.assign
Object.assign(target, obj)
Копирует все свойства перечисленных объектов в целевой. Принимает: 1) целевой объект, 2) один или несколько объектов, из которых будут скопированы свойства в целевой. Возвращает получившийся объект.
const website = {
domain: '',
url: 'frontend',
hosting: 'beget',
};
Object.assign(website, {
domain: 'frontendx',
loading: 0.75,
},
{
url: 'https://frontendx.ru',
})
// return: {
// domain: "frontendx",
// url: "https://frontendx.ru",
// hosting: "beget",
// loading: 0.75
// }
♦ Object.create
Object.create(proto, [descriptors])
Создает объект и записывает в прототип переданный в параметре объект. Первым аргументом передаётся объект, который станет прототипом вновь созданного объекта, вторым параметром — объект со своими дескрипторами свойств, которые могут расширить и дополнить новый объект. Возвращает новый объект с заданным прототипом и свойствами.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
let newObject = Object.create(website, {
hosting: {
value: 'beget'
},
domain: {
value: 'test'
}
});
newObject.hosting
// return: "beget"
newObject.domain
// return: "test"
newObject.url
// return: "https://frontendx.ru"
// клонирование объекта
const clone = Object.create(
Object.getPrototypeOf(website),
Object.getOwnPropertyDescriptors(website)
);
♦ Object.setPrototypeOf
Object.setPrototypeOf(object, proto)
Устанавливает прототип (то есть внутреннее свойство [[Prototype]]) указанного объекта в другой объект или null. Не рекомендуется использовать, очень медленная операция, лучше использовать Object.create() для создания объекта с нужным прототипом. Первым агрументом идёт объект, которому устанавливается новый прототип, второй аргумент — новый прототип объекта либо null.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
Object.getPrototypeOf(website)
// return: Object { }
const object = Object.setPrototypeOf(website, null);
Object.getPrototypeOf(website)
// return: null
Object.getPrototypeOf(object)
// return: null
object
// return: Object { domain: "frontendx", url: "https://frontendx.ru" }
♦ Object.fromEntries
Object.fromEntries(array)
Преобразовывает массив в объект. Принимает массив, возвращает объект, созданный из массива.
const website = [
['domain', 'frontendx'],
['url', 'https://frontendx.ru'],
];
Object.fromEntries(website)
// return: { domain: "frontendx", url: "https://frontendx.ru" }
Возвращаемые значения
♦ Object.getOwnPropertySymbols
Object.getOwnPropertySymbols(object)
Возвращает массив всех символьных свойств переданного объекта.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
const a = Symbol('a');
const b = Symbol.for('b');
website[a] = 'localSymbol';
website[b] = 'globalSymbol';
const objectSymbols = Object.getOwnPropertySymbols(website);
objectSymbols.length
// return: 2
objectSymbols
// return: [Symbol(a), Symbol(b)]
♦ Object.keys
Object.keys(object)
Возвращает массив собственных ключей переданного объекта.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
Object.keys(website)
// return: ["domain", "url"]
♦ Object.values
Object.values(object)
Возвращает массив собственных значений переданного объекта.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
Object.values(website)
// return: ["frontendx", "https://frontendx.ru"]
♦ Object.entries
Object.entries(object)
Возвращает массив пар [ключ, значение].
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
Object.entries(website)
// return: [ ["domain", "frontendx"], ["url", "https://frontendx.ru"] ]
♦ Object.getPrototypeOf
Object.getPrototypeOf(object)
Возвращает прототип (то есть внутреннее свойство [[Prototype]]
) указанного объекта.
const proto = {};
const object = Object.create(proto);
Object.getPrototypeOf(object) === proto
// return: true
Object.getPrototypeOf('text') === String.prototype
// return: true
♦ Object.getOwnPropertyDescriptors
Object.getOwnPropertyDescriptors(object)
Возвращает все собственные дескрипторы свойств данного объекта.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
const descriptors = Object.getOwnPropertyDescriptors(website);
descriptors.url.value
// return: "https://frontendx.ru"
descriptors.domain.value
// return: "frontendx"
descriptors
/* return:
{
domain: {
value: "frontendx",
writable: true,
enumerable: true,
configurable: true
},
url: {
value: "https://frontendx.ru",
writable: true,
enumerable: true,
configurable: true
}
}
*/
♦ Object.getOwnPropertyNames
Object.getOwnPropertyNames(object)
Возвращает массив всех собственных строковых ключей. Не возвращает Symbols поля.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
Object.getOwnPropertyNames(website)
// return: ["domain", "url"]
♦ Reflect.ownKeys
Reflect.ownKeys(object)
Статический метод, возвращает массив имён, а также Symbols собственных полей объекта.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
const a = Symbol('a');
const b = Symbol.for('b');
website[a] = 'localSymbol';
website[b] = 'globalSymbol';
Object.getOwnPropertyNames(website)
// return: ["domain", "url"]
Reflect.ownKeys(website)
// return: ["domain", "url", Symbol(a), Symbol(b)]
Дополнительно
♦ for in
for(let item in object)
Перебирает только перечисляемые свойства объекта, а также свойства, которые находятся в прототипе.
const website = {
domain: 'frontendx',
url: 'https://frontendx.ru',
};
for(let item in website){
console.log(item);
console.log(website[item]);
}
// return: "domain"
// return: "frontendx"
// return: "url"
// return: "https://frontendx.ru"