Объекты — это фундаментальная часть JavaScript, служащая основой для хранения данных и управления ими. Объект представляет собой набор свойств, и каждое свойство представляет собой связь между ключом (или именем) и значением. Понимание того, как создавать, манипулировать и использовать объекты, имеет решающее значение для любого разработчика JavaScript. В этой статье мы рассмотрим различные объектные функции в JavaScript, предоставив подробные объяснения, примеры и комментарии, которые помогут вам освоить их.
В JavaScript объекты используются для хранения коллекций данных и более сложных сущностей. Они создаются с использованием литералов объекта или конструктора Object.
// Using object literals let person = { name: "John", age: 30, city: "New York" }; // Using the Object constructor let person = new Object(); person.name = "John"; person.age = 30; person.city = "New York";
let obj = {}; console.log(obj.__proto__ === Object.prototype); // Output: true
Копирует значения всех перечисляемых собственных свойств из одного или нескольких исходных объектов в целевой объект. Он возвращает целевой объект.
let target = {a: 1}; let source = {b: 2, c: 3}; Object.assign(target, source); console.log(target); // Output: {a: 1, b: 2, c: 3}
Создает новый объект с указанным объектом-прототипом и свойствами.
let person = { isHuman: false, printIntroduction: function() { console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`); } }; let me = Object.create(person); me.name = "Matthew"; me.isHuman = true; me.printIntroduction(); // Output: My name is Matthew. Am I human? true
Определяет новые или изменяет существующие свойства непосредственно объекта, возвращая объект.
let obj = {}; Object.defineProperties(obj, { property1: { value: true, writable: true }, property2: { value: "Hello", writable: false } }); console.log(obj); // Output: { property1: true, property2: 'Hello' }
Определяет новое свойство непосредственно в объекте или изменяет существующее свойство и возвращает объект.
let obj = {}; Object.defineProperty(obj, 'property1', { value: 42, writable: false }); console.log(obj.property1); // Output: 42 obj.property1 = 77; // No error thrown, but the property is not writable console.log(obj.property1); // Output: 42
Возвращает массив собственных перечислимых пар свойств со строковым ключом [ключ, значение] данного объекта.
let obj = {a: 1, b: 2, c: 3}; console.log(Object.entries(obj)); // Output: [['a', 1], ['b', 2], ['c', 3]]
Замораживает объект. Замороженный объект больше нельзя изменить; замораживание объекта предотвращает добавление к нему новых свойств, удаление существующих свойств и изменение значений существующих свойств.
let obj = {prop: 42}; Object.freeze(obj); obj.prop = 33; // Fails silently in non-strict mode console.log(obj.prop); // Output: 42
Преобразует список пар ключ-значение в объект.
let entries = new Map([['foo', 'bar'], ['baz', 42]]); let obj = Object.fromEntries(entries); console.log(obj); // Output: { foo: 'bar', baz: 42 }
Возвращает дескриптор свойства для собственного свойства (то есть того, которое непосредственно присутствует в объекте, а не в цепочке прототипов объекта) данного объекта.
let obj = {property1: 42}; let descriptor = Object.getOwnPropertyDescriptor(obj, 'property1'); console.log(descriptor); // Output: { value: 42, writable: true, enumerable: true, configurable: true }
Возвращает объект, содержащий все собственные дескрипторы свойств объекта.
let obj = {property1: 42}; let descriptors = Object.getOwnPropertyDescriptors(obj); console.log(descriptors); /* Output: { property1: { value: 42, writable: true, enumerable: true, configurable: true } } */
Возвращает массив всех свойств (включая неперечисляемые свойства, за исключением тех, которые используют символ), найденных непосредственно в данном объекте.
let obj = {a: 1, b: 2, c: 3}; let props = Object.getOwnPropertyNames(obj); console.log(props); // Output: ['a', 'b', 'c']
Возвращает массив всех свойств символа, найденных непосредственно в данном объекте.
let obj = {}; let sym = Symbol('foo'); obj[sym] = 'bar'; let symbols = Object.getOwnPropertySymbols(obj); console.log(symbols); // Output: [Symbol(foo)]
Возвращает прототип (т. е. значение внутреннего свойства [[Prototype]]) указанного объекта.
let proto = {}; let obj = Object.create(proto); console.log(Object.getPrototypeOf(obj) === proto); // Output: true
Определяет, являются ли два значения одним и тем же значением.
console.log(Object.is('foo', 'foo')); // Output: true console.log(Object.is({}, {})); // Output: false
Определяет, разрешено ли расширение объекта.
let obj = {}; console.log(Object.isExtensible(obj)); // Output: true Object.preventExtensions(obj); console.log(Object.isExtensible(obj)); // Output: false
Определяет, заморожен ли объект.
let obj = {}; console.log(Object.isFrozen(obj)); // Output: false Object.freeze(obj); console.log(Object.isFrozen(obj)); // Output: true
Определяет, запечатан ли объект.
let obj = {}; console.log(Object.isSealed(obj)); // Output: false Object.seal(obj); console.log(Object.isSealed(obj)); // Output: true
Возвращает массив имен собственных перечислимых свойств данного объекта, повторяемых в том же порядке, что и обычный цикл.
let obj = {a: 1, b: 2, c: 3}; console.log(Object.keys(obj)); // Output: ['a', 'b', 'c']
Предотвращает любые расширения объекта.
let obj = {}; Object.preventExtensions(obj); obj.newProp = 'test'; // Throws an error in strict mode console.log(obj.newProp); // Output: undefined
Запечатывает объект, предотвращая добавление к нему новых свойств и отмечая все существующие свойства как ненастраиваемые. Значения текущих свойств по-прежнему можно изменять, пока они доступны для записи.
let obj = {property1: 42}; Object.seal(obj); obj.property1 = 33; delete obj.property1; // Throws an error in strict mode console.log(obj.property1); // Output: 33
Задает прототип (т. е. внутреннее свойство [[Prototype]]) указанного объекта равным другому объекту или нулю.
let proto = {}; let obj = {}; Object.setPrototypeOf(obj, proto); console.log(Object.getPrototypeOf(obj) === proto); // Output: true
Возвращает массив значений собственных перечисляемых свойств данного объекта в том же порядке, в котором указан в цикле for...in.
let obj = {a: 1, b: 2, c: 3}; console.log(Object.values(obj)); // Output: [1, 2, 3]
Использование Object.assign() для клонирования объекта.
let obj = {a: 1, b: 2}; let clone = Object.assign({}, obj); console.log(clone); // Output: {a: 1, b: 2}
Использование Object.assign() для объединения объектов.
let obj1 = {a: 1, b: 2}; let obj2 = {b: 3, c: 4}; let merged = Object.assign({}, obj1, obj2); console.log(merged); // Output: {a: 1, b: 3, c: 4}
Использование Object.create() для создания объекта с указанным прототипом.
let proto = {greet: function() { console.log("Hello!"); }}; let obj = Object.create(proto); obj.greet(); // Output: Hello!
Использование Object.defineProperty() для определения неизменяемых свойств.
let obj = {}; Object.defineProperty(obj, 'immutableProp', { value: 42, writable: false }); console.log(obj.immutableProp); // Output: 42 obj.immutableProp = 77; // Throws an error in strict mode console.log(obj.immutableProp); // Output: 42
Использование Object.entries() для преобразования объекта в массив пар ключ-значение.
let obj = {a: 1, b: 2, c: 3}; let entries = Object.entries(obj); console.log(entries); // Output: [['a', 1], ['b', 2], ['c', 3]]
Объекты — это основной компонент JavaScript, предлагающий гибкий способ управления данными и манипулирования ими. Овладев объектными функциями, вы сможете с легкостью выполнять сложные операции и писать более эффективный и удобный в сопровождении код. В этом подробном руководстве рассмотрены наиболее важные объектные функции JavaScript, а также приведены подробные примеры и пояснения. Практикуйтесь в использовании этих функций и экспериментируйте с различными вариантами использования, чтобы углубить понимание и улучшить свои навыки программирования.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3