В функции foo происходит фильтрация объекта o по ключам из массива arr. Важно различать две проверки:
const S = { id: 1, name: "Ivan", age: "39", tel: [phone] };
В функции foo происходит фильтрация объекта o по ключам из массива arr. Важно различать две проверки:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
const S = { id: 1, name: "Ivan", age: "39", tel: [phone] };
function getParam(obj, key) { return obj[key]; }
getParam(S, "tel"); getParam(S, "job");
Ответ
В функции foo происходит фильтрация объекта o по ключам из массива arr. Важно различать две проверки:
o.hasOwnProperty(x)проверяет, есть ли у объекта собственное свойство с именемx, включая свойства со значениемundefinedилиnull.if (o[x])проверяет истинность значения свойства, то есть свойства с ложными значениями (0,false,null,undefined,'') будут проигнорированы.
В вашем примере:
const obj = {a: 's'};
foo(obj, ['a']); // { a: 's' }
Если заменить условие на if (o.hasOwnProperty(x)), то функция будет копировать все свойства, даже если их значение ложное. Это более корректно, если нужно именно проверить наличие свойства, а не его значение.
Пример:
const obj = {a: 0, b: false, c: null};
foo(obj, ['a', 'b', 'c']);
// с hasOwnProperty: { a: 0, b: false, c: null }
// с if(o[x]): {} (потому что 0, false, null — ложные)
Рекомендуется использовать hasOwnProperty для проверки наличия свойства, если важны все значения.