«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Понимание ключевых методов объекта в JavaScript

Понимание ключевых методов объекта в JavaScript

Опубликовано 4 ноября 2024 г.
Просматривать:848

Understanding Key Object Methods in JavaScript

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

  1. Object.create()
  2. Object.assign()
  3. Object.keys()
  4. Object.values()
  5. Object.entries()
  6. Object.freeze()
  7. Object.seal()
  8. Object.preventExtensions()
  9. Object.getPrototypeOf()
  10. Object.setPrototypeOf()
  11. Object.defineProperty()
  12. Object.defineProperties()
  13. Object.getOwnPropertyDescriptor()
  14. Object.getOwnPropertyDescriptors()
  15. Object.getOwnPropertyNames()
  16. Объект.is()
  17. Object.isFrozen()
  18. Object.isSealed()
  19. Object.isExtensible()
  20. Object.fromEntries()
  21. Object.hasOwnProperty()
  22. Object.hasOwn()
  23. Object.groupBy() (предлагаемая функция, может быть не полностью доступна)

Object.create()
Object.create() — это метод в JavaScript, используемый для создания нового объекта с указанным объектом-прототипом и дополнительными свойствами. Он обеспечивает более детальный контроль над прототипом и свойствами объекта по сравнению с использованием литералов или конструкторов объектов.

const personPrototype = {
  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

const john = Object.create(personPrototype);
john.name = "John";
john.greet();  // Output: Hello, my name is John

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

const target = { a: 1 };
const source = { b: 2, c: 3 };
const result = Object.assign(target, source);
console.log(result);  // Output: { a: 1, b: 2, c: 3 }
console.log(target);  // Output: { a: 1, b: 2, c: 3 } (target is also modified)

Object.keys()
Возвращает массив имен собственных перечислимых свойств (ключей) объекта

const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj));  // Output: ['a', 'b', 'c']

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

const obj = { a: 1, b: 2, c: 3 };
console.log(Object.values(obj));  // Output: [1, 2, 3]

Object.entries()
Возвращает массив пар собственных перечислимых свойств объекта [ключ, значение]

const obj = { a: 1, b: 2, c: 3 };
console.log(Object.entries(obj));  // Output: [['a', 1], ['b', 2], ['c', 3]]

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

const obj = { a: 1 };
Object.freeze(obj);
obj.a = 2;  // No effect, because the object is frozen
console.log(obj.a);  // Output: 1

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

const obj = { a: 1 };
Object.seal(obj);
obj.a = 2;  // Allowed
delete obj.a;  // Not allowed
console.log(obj.a);  // Output: 2

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

const obj = { a: 1 };
Object.preventExtensions(obj);
obj.b = 2;  // Not allowed
console.log(obj.b);  // Output: undefined

Object.getPrototypeOf()
Возвращает прототип (т. е. внутренний [[Prototype]]) указанного объекта

const obj = {};
const proto = Object.getPrototypeOf(obj);
console.log(proto);  // Output: {} (the default Object prototype)

Object.setPrototypeOf()
Устанавливает прототип указанного объекта.

const proto = { greet() { console.log('Hello!'); } };
const obj = {};
Object.setPrototypeOf(obj, proto);
obj.greet();  // Output: 'Hello!'

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

const obj = {};
Object.defineProperty(obj, 'a', {
  value: 42,
  writable: false,  // Cannot modify the value
});
obj.a = 100;  // No effect because writable is false
console.log(obj.a);  // Output: 42

Object.defineProperties()
Определяет несколько свойств объекта с помощью дескрипторов свойств.

const obj = {};
Object.defineProperties(obj, {
  a: { value: 42, writable: false },
  b: { value: 100, writable: true }
});
console.log(obj.a);  // Output: 42
console.log(obj.b);  // Output: 100

Object.getOwnPropertyDescriptor()
Возвращает дескриптор свойства объекта.

const obj = { a: 1 };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'a');
console.log(descriptor);  
// Output: { value: 1, writable: true, enumerable: true, configurable: true }

Object.getOwnPropertyDescriptors()
Возвращает объект, содержащий все дескрипторы свойств собственных свойств объекта

const obj = { a: 1 };
const descriptors = Object.getOwnPropertyDescriptors(obj);
console.log(descriptors);
// Output: { a: { value: 1, writable: true, enumerable: true, configurable: true } }

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

const obj = { a: 1 };
Object.defineProperty(obj, 'b', { value: 2, enumerable: false });
console.log(Object.getOwnPropertyNames(obj));  // Output: ['a', 'b']

Object.is()
Сравнивает, совпадают ли два значения (например, ===, но обрабатывает особые случаи, например NaN)

console.log(Object.is(NaN, NaN));  // Output: true
console.log(Object.is( 0, -0));    // Output: false

Object.isFrozen()
Проверяет, заморожен ли объект

const obj = Object.freeze({ a: 1 });
console.log(Object.isFrozen(obj));  // Output: true

Object.isSealed()
Проверяет, запечатан ли объект.

const obj = Object.seal({ a: 1 });
console.log(Object.isSealed(obj));  // Output: true

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

const obj = { a: 1 };
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj));  // Output: false

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

const entries = [['a', 1], ['b', 2]];
const obj = Object.fromEntries(entries);
console.log(obj);  // Output: { a: 1, b: 2 }

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

const obj = { a: 1 };
console.log(obj.hasOwnProperty('a'));  // Output: true

Object.hasOwn()
Object.hasOwn() — это новый метод, представленный в ES2022 как альтернатива Object.hasOwnProperty(). Он проверяет, имеет ли объект прямое (собственное) свойство с указанным ключом, не просматривая цепочку прототипов.

const obj = {
  name: 'Alice',
  age: 25
};

console.log(Object.hasOwn(obj, 'name'));  // true
console.log(Object.hasOwn(obj, 'gender'));  // false

Object.groupBy
Object.groupBy — это относительно новая функция, предложенная для JavaScript в ECMAScript 2024, которая позволяет группировать объекты на основе общего критерия. Он еще не широко доступен во всех средах, поэтому может не работать во многих браузерах или движках JavaScript, пока не будет полностью реализован.

const array = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 25 },
  { name: 'David', age: 30 },
];

// Group objects by age
const groupedByAge = Object.groupBy(array, item => item.age);

console.log(groupedByAge);

/*
Expected Output:
{
  25: [
    { name: 'Alice', age: 25 },
    { name: 'Charlie', age: 25 }
  ],
  30: [
    { name: 'Bob', age: 30 },
    { name: 'David', age: 30 }
  ]
}
*/

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/muthuraja_r/javascript-object-methods-33n1?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3