Как вывести все свойства произвольно заданного объекта
Как вывести на консоль все свойства произвольно заданного объекта?
function _keys(obj){
if (!isObject(obj)) return [];
//Здесь должен быть ваш код
}
function isObject(obj){
//Здесь должен быть ваш код
}
Ответы (3 шт):
const hidden = Symbol.for('hidden');
const obj = {
key_a: 'value_a',
key_b: 'value_b',
[hidden]: 'hidden_value'
};
// Выведет все ключи объекта
console.log(Object.keys(obj));
// Выведет все пары ключ-значение
console.log(Object.entries(obj));
// Выдаст имена свойств
console.log(Object.getOwnPropertyNames(obj));
// Выведет символы скрытых свойств
console.log(Object.getOwnPropertySymbols(obj));
// * В песочнице console.log не выводит символы,
// но в консоли браузера выводит
// Выдаст все свойства с их getter-ами и setter-ами и правами доступа
console.log(Object.getOwnPropertyDescriptors(obj));
А вот так можно вывести ключи не только непосредственно самого объекта, но и наследуемых прототипов тоже:
console.log(keys(window));
console.log(keys(document));
function keys(obj){
let key, keys = [];
for(key in obj) keys.push(key);
return keys;
}
function _keys(obj){
if (!isObject(obj)) return [];
console.log('Первый вариант:');
console.log(obj);
console.log('\n\nВторой вариант:');
console.log( Object.keys(obj) );
console.log('\n\nТретий вариант:');
console.log( JSON.stringify(obj) );
console.log('\n\nЧетвёртый вариант:');
for (const [key, value] of Object.entries(obj)) {
console.log(`${key}: ${value}`);
}
}
function isObject(obj){
return typeof obj === "object" && obj !== null;
}
_keys({
width: 10,
height: 30,
});
Для получения всех ключей объекта существует метод Object.keys()
Для получения всех свойств объекта существует метод Object.values()
Для того чтобы осуществить проверку на объект, можно использовать typeof, но в таком случае если будет передан массив, то typeof выдаст object, так же как и для объекта.
typeof({}); //'object'
typeof([]); //'object'
Поэтому можно воспользоваться такой конструкцией:
Object.prototype.toString.call(obj) === '[object Object]'
Есть более простой способ, но нужно воспользоваться опциональной цепочкой (?), так как в случае если не передать ничего в функцию, то будет TypeError, по той причине что будет вызываться метод toString на obj, а он в свою очередь будет undefined, соответсвенно метода toString у undefined не обнаружится и будет ошибка:
function isObject(obj) {
return obj?.toString() === '[object Object]'
}
function _keys(obj){
if (!isObject(obj)) return [];
else return Object.keys(obj)
}
function _values(obj){
if (!isObject(obj)) return [];
else return Object.values(obj)
}
function isObject(obj){
return Object.prototype.toString.call(obj) === '[object Object]'
}
console.log(_keys({f: 4, d: 5}))
console.log(_values({f: 4, d: 5}))