JavaScript метод Object.entries()
Определение и применение
JavaScript метод entries() позволяет возвратить массив, содержащий собственные перечислимые свойства и
методы заданного объекта, включая их значения, при этом по каждому свойству или методу с его значением создается
отдельный массив в следующем формате (первым элементом массива будет ключ, а вторым значение):
// возвращаемое значение объекта, содержащего одно перечислимое свойство или метод
[ ["ключ", значение] ]
// возвращаемое значение объекта, содержащего несколько перечислимых свойств или методов
[ ["ключ", значение], ...["ключ", значение] ]
У массива и строковой обёртки есть собственные индексные свойства. Их ключи возвращаются в виде строк:
[ ["индекс", значение], ...["индекс", значение] ]
Под перечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение
true, вследствие чего они будут перечислимы в циклах, например в цикле for...in. Атрибуты в
свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают
атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании
метода
defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
null и undefined вызывают TypeError; другие примитивы преобразуются в
объекты-обёртки. Строка имеет собственные перечислимые индексные свойства.
Учитываются только собственные перечислимые свойства со строковыми ключами; символьные ключи пропускаются.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2017 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
entries | 54 | 14 | 47 | 41 | 10.1 | 54 | 47 | 41 | 10.3 | 6.0 | 54 | 10.3 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Object.entries( obj );
Спецификация
Значения параметров
| Параметр | Описание |
|---|---|
obj |
Объект, перечислимые собственные свойства и их значения которого должны быть возвращены. Обязательное значение. |
Исключения
| Тип исключения | Описание |
|---|---|
TypeError |
Возникает в том случае, если методу в качестве значения параметра передается undefined или
null (не удается преобразовать значение undefined или null в объект).
|
Примеры, попробуйте сами
В примере «Пары ключей и значений» показан результат вызова метода.
Пары ключей и значений
Измените свойства исходного объекта и сравните результат до и после вызова метода.
index.html
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Пары ключей и значений</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
var obj = { a: 1, b: 2, c: 3 }
var newArr = Object.entries(obj)
console.log(newArr) // переменная содержит значение [ ["a", 1], ["b", 2], ["c", 3] ]
// изменяем в объекте существующее свойство
Object.defineProperty(obj, 'c', {
enumerable: false, // устанавливаем, что свойство не перечислимо
})
console.log(Object.entries(obj)) // переменная содержит значение [ ["a", 1], ["b", 2] ]
var obj = { a: 1, b: 2, c: () => console.log('hello') }
var newArr = Object.entries(obj)
console.log(newArr) // переменная содержит значение [ ["a", 1], ["b", 2], ["c", () => console.log( "hello" )] ] — функция в выводе примера показана как null
newArr[2][1]() // выведет значение hello в консоль
var str = 'What'
var newArr = Object.entries(str)
console.log(newArr) // переменная содержит значение [ ["0", "W"], ["1", "h"], ["2", "a"], ["3", "t"] ]
var arr = ['a', 'b', 'c']
var newArr = Object.entries(arr)
console.log(newArr) // переменная содержит значение [ ["0", "a"], ["1", "b"], ["2", "c"] ]
var objWithSymbol = { [Symbol('test')]: 'test', a: 'test' }
var newArr = Object.entries(objWithSymbol) // игнорирует свойства, ключом которых является символ
console.log(newArr) // переменная содержит значение [ ["a", "test"] ]
try {
Object.entries(undefined)
} catch (error) {
console.log(error.name)
}
try {
Object.entries(null)
} catch (error) {
console.log(error.name)
}