Как просмотреть значение свойств объекта
Перейти к содержимому

Как просмотреть значение свойств объекта

  • автор:

Как просмотреть значение свойств объекта

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

"свойство|метод" in объект

в кавычках идет название свойства или метода, а после in — название объекта. Если свойство или метод с подобным именем имеется, то оператор возвращает true . Если нет — то возвращается false .

Например, узнаем, есть ли в объекте ряд свойств:

const user = <>; user.name = "Tom"; user.age = 26; user.print = function()< console.log(this.name); console.log(this.age); >; const hasNameProp = "name" in user; console.log(hasNameProp); // true - свойство name есть в user const hasWeightProp = "weight" in user; console.log(hasWeightProp); // false - в user нет свойства или метода под названием weight

С помощью выражения «name» in user проверяем, есть ли в объекте user свойство «name» и результат проверки передаем в константу hasNameProp. Далее анологичным образом проверяем наличие свойства wheight .

Подобным образом можно проверить и наличие методов:

const hasPrintMethod = "print" in user; console.log(hasPrintMethod); // true - в user есть метод print

Альтернативный способ заключается на значение undefined . Если свойство или метод равен undefined, то эти свойство или метод не определены:

const hasNameProp = user.name!==undefined; console.log(hasNameProp); // true const hasWeightProp = user.weight!==undefined; console.log(hasWeightProp); // false

И так как объекты представляют тип Object, а значит, имеет все его методы и свойства, то объекты также могут использовать метод hasOwnProperty() , который определен в типе Object:

const hasNameProp = user.hasOwnProperty("name"); console.log(hasNameProp); // true const hasPrintMethod = user.hasOwnProperty("print"); console.log(hasPrintMethod); // true const hasWeightProp = user.hasOwnProperty("weight"); console.log(hasWeightProp); // false

Перебор свойств и методов

С помощью цикла for мы можем перебрать объект как обычный массив и получить все его свойства и методы и их значения:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; for(const prop in tom)

И при запуске консоль браузера отобразит следующий вывод:

name : Tom age : 26 print : print() < console.log(`Name: $Age: $`); >

Функции Object.entries, Object.keys, Object,values

С помощью дополнительных функций Object.entries , Object.keys и Object,values можно получить все свойства (в том числе методы) объекта и их значения.

Object.entries()

Функция Object.entries() в качестве параметра принимает объект и возвращает массив пар «название_свойства — значение», где каждая пара свойство-значение представляет массив. Например:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; for(const prop of Object.entries(tom))

["name", "Tom"] ["age", 26] ["print", ƒ]
Object.keys()

Функция Object.keys() позволяет получить массив названий всех свойств объекта. Например, возьмем выше опредеенный объект tom :

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; console.log(Object.keys(tom)); // ["name", "age", "print"]

Соответственно можно перебрать этот набор и получить значения свойств:

for(const prop of Object.keys(tom)) < const value = tom[prop]; // получаем по названию значение свойства console.log(prop,value); >
name Tom age 26 print ƒ print() < console.log(`Name: $Age: $`); >
Object.values()

Функция Object.values() возвращает массив, который содержит все значения свойств объекта:

const tom = < name: "Tom", age: 26, print()< console.log(`Name: $Age: $`); > >; console.log(Object.values(tom)); // ["Tom", 26, print()]

Проверка наличия свойств

Осваивайте профессию, начните зарабатывать, а платите через год!

Курсы Python Ак­ция! Бес­плат­но!

Станьте хакером на Python за 3 дня

Веб-вёрстка. CSS, HTML и JavaScript

Курс Bootstrap 4

Станьте веб-разработчиком с нуля

Часто при работе с объектом полезно проверить, что содержится в этом объекте, есть ли в нём свойство с заданным именем и ка­кое это свойство. Данную процедуру можно проделать с помощью оператора in и с помощью методов hasOwnProperty() и propertyIsEnumerable() или просто обратившись к свойству.

Оператор in

Оператор in принимает имя свойства (в виде строки) в левом операнде и объект в правом операнде. Оператор in возвращает true , если свойство содержится в указанном объекте или в его цепочке прототипов:

Выполнить код » Скрыть результаты

На заметку: Значение свойства в левом операнде оператора in заключается в двойные кавычки – то есть на самом деле указывается текстовая строка с названием свойства. Так же мы поступаем, когда к свойству объекта обращаемся с использованием квадратных скобок, то есть при использовании команды вида объект[«свойство»].

Если вы удалили свойство при помощи оператора delete, то оператор in возвратит false для этого свойства:

js Как проверить что каждое значение объекта true?

что-то на подобии этого. только что б работало. А то every() тут не по функции фильтрует, а по string .

Отслеживать
BlackStar1991
задан 17 фев в 13:30
BlackStar1991 BlackStar1991
5,739 3 3 золотых знака 19 19 серебряных знаков 58 58 бронзовых знаков

Готового метода нет. Придется самому изобретать. Ну а реалицая на выбор, либо ключи перебирвать циклом, либо превратить в массив и далее каким то перебирающим методом массива проверять

17 фев в 13:35

У вас вообще ошибка. Вы в every передаете просто строку, а должны передать колбэк. arr.every(el => el === true) и всё заработает.

17 фев в 14:21

Вам нужен, в первую очередь, самый быстрый метод или просто рабочий метод? судя по тексту вопроса, вам важна скорость

17 фев в 14:30

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Если значения только булевые и всегда существуют, то можно обойтись простыми условиями используя includes() :

let validationConditions1 = < notEmptyName: false, notEmptyEmail: false, correctEmail: false, notEmptyMessage: false, validCapcha: false >; let validationConditions2 = < notEmptyName: true, notEmptyEmail: true, correctEmail: true, notEmptyMessage: true, validCapcha: true >; let validationConditions3 = < notEmptyName: true, notEmptyEmail: true, correctEmail: true, notEmptyMessage: false, validCapcha: true >; function checkValues(arr) < if (arr.includes(true)) < if (!arr.includes(false)) < console.log("Все значения TRUE") >else < console.log("Смешанные значения") >> else < console.log("Все значения FALSE") >> checkValues( Object.values(validationConditions1) ); checkValues( Object.values(validationConditions2) ); checkValues( Object.values(validationConditions3) );

Отслеживать
ответ дан 17 фев в 15:47
33k 6 6 золотых знаков 29 29 серебряных знаков 71 71 бронзовый знак

способ проверки, что у объекта КАЖДОЕ значение имеет значенее true или false ?

Вот так можно проверять.

let validationConditions = < notEmptyName: false, notEmptyEmail: false, correctEmail: false, notEmptyMessage: false, validCapcha: true, >let validationConditions2 = < notEmptyName: true, notEmptyEmail: true, correctEmail: true, notEmptyMessage: true, validCapcha: true, >const arrValidation = Object.values(validationConditions); const arrValidation2 = Object.values(validationConditions2); function checkValues(arr, type = true) < if (arr.every(v =>v === type)) < console.log("Everything values " + type) >else < console.log("No " + type) >> checkValues(arrValidation, false); checkValues(arrValidation2);

Еще вот так можно проверить.

let validationConditions = < notEmptyName: false, notEmptyEmail: false, correctEmail: false, notEmptyMessage: false, validCapcha: true, >let validationConditions2 = < notEmptyName: true, notEmptyEmail: true, correctEmail: true, notEmptyMessage: true, validCapcha: true, >const arrValidation = Object.values(validationConditions); const arrValidation2 = Object.values(validationConditions2); function checkValues(arr, type = true) < const s = new Set(arr) if (s.size === 1 && s.has(type)) < console.log("Everything values " + type) >else < console.log("No " + type) >> checkValues(arrValidation, false); checkValues(arrValidation2);

Object.values()

Метод Object.values() возвращает массив значений перечисляемых свойств объекта в том же порядке что и цикл for. in . Разница между циклом и методом в том, что цикл перечисляет свойства и из цепочки прототипов.

Интерактивный пример

Синтаксис

Object.values(obj)

Параметры

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

Возвращаемое значение

Массив содержащий значения перечисляемых свойств объекта.

Описание

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

Примеры

var obj =  foo: "bar", baz: 42 >; console.log(Object.values(obj)); // ['bar', 42] // Массив как объект var obj =  0: "a", 1: "b", 2: "c" >; console.log(Object.values(obj)); // ['a', 'b', 'c'] // Массив как объект со случайным порядком ключей // Когда мы используем нумерованные ключ, значения возвращаются в порядке возрастания var an_obj =  100: "a", 2: "b", 7: "c" >; console.log(Object.values(an_obj)); // ['b', 'c', 'a'] // getFoo неперечисляемое свойство var my_obj = Object.create( >,  getFoo:  value: function ()  return this.foo; >, >, >, ); my_obj.foo = "bar"; console.log(Object.values(my_obj)); // ['bar'] // Аргумент, не являющийся объектом, будет приведён к объекту console.log(Object.values("foo")); // ['f', 'o', 'o'] 

Полифил

Для добавления совместимости Object.values со старым окружением, которое не поддерживает нативно его, вы можете найти полифил здесь tc39/proposal-object-values-entries или в es-shims/Object.values репозитории.

Спецификации

Specification
ECMAScript Language Specification
# sec-object.values

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • Перечисляемость и принадлежность свойств
  • Object.keys()
  • Object.entries() Экспериментальная возможность
  • Object.prototype.propertyIsEnumerable()
  • Object.create()
  • Object.getOwnPropertyNames()

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 7 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *