JavaScript метод Object.values()
Определение и применение
JavaScript метод Object.values() возвращает массив собственных перечислимых значений свойств и методов
указанного объекта.
Под перечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение
true, вследствие чего они будут перечислимы в циклах, например в цикле for...in. Атрибуты в
свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают
атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании
метода
defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
null и undefined вызывают TypeError; другие примитивы преобразуются в
объекты-обёртки. Строка имеет собственные перечислимые индексные свойства.
Учитываются только собственные перечислимые свойства со строковыми ключами; символьные ключи пропускаются.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2017 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
values | 54 | 14 | 47 | 41 | 10.1 | 54 | 47 | 41 | 10.3 | 6.0 | 54 | 10.3 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Object.values( 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: () => console.log('hello') }
var newArr = Object.values(obj)
console.log(newArr) // переменная содержит значение [ 1, 2, () => console.log( "hello" ) ] — функция в выводе примера показана как null
// изменяем в объекте существующее свойство
Object.defineProperty(obj, 'c', {
enumerable: false, // устанавливаем, что свойство не перечислимо
})
console.log(Object.values(obj)) // переменная содержит значение [ 1, 2 ]
var str = 'Hello'
var newArr = Object.values(str)
console.log(newArr) // переменная содержит значение [ "H", "e", "l", "l", "o"]
var arr = ['a', 'b', 'c']
var newArr = Object.values(arr)
console.log(newArr) // переменная содержит значение [ "a", "b", "c" ]
var objWithSymbol = { [Symbol('123')]: '123', a: 'test' }
var newArr = Object.values(objWithSymbol) // игнорирует свойства, ключом которых является символ
console.log(newArr) // переменная содержит значение [ "test" ]
try {
Object.values(undefined)
} catch (error) {
console.log(error.name)
}
try {
Object.values(null)
} catch (error) {
console.log(error.name)
}