Почему объект по ключу из параметра filter метода undefined, а строкой работает?

Когда вызывается метод filter() для массива в JavaScript, он ожидает функцию обратного вызова (callback), которая принимает три параметра: текущее значение элемента массива, индекс этого значения и сам массив. Когда вы используете этот метод с функцией обратного вызова, вы можете устанавливать различные условия для фильтрации элементов массива.

При использовании объекта в качестве параметра для filter() и пытке обратиться к его свойству по ключу, в случае, если ключ отсутствует, вы получите undefined. И если функция обратного вызова ожидает истинное (true) или ложное (false) значение, то значение undefined будет интерпретировано как false, поэтому элемент массива, для которого не удалось найти значение по ключу, не будет проходить фильтрацию.

Например:

const objectsArray = [
  { name: 'Alice' },
  { name: 'Bob' },
  { age: 30 }
];

const filteredArray = objectsArray.filter(item => item.name);
console.log(filteredArray); // [{ name: 'Alice' }, { name: 'Bob' }]

Когда вы используете строку в качестве параметра для filter(), каждое значение будет рассматриваться как логическое, и пустая строка будет интерпретирована как false, а любая непустая строка - как true. Поэтому строка с ключом, которого нет в объекте, будет рассматриваться как true, и элемент массива будет проходить фильтрацию.

Например:

const objectsArray = [
  { name: 'Alice' },
  { name: 'Bob' },
  { age: 30 }
];

const filteredArray = objectsArray.filter('name');
console.log(filteredArray); // [{ name: 'Alice' }, { name: 'Bob' }, { age: 30 }]

Таким образом, различие в поведении при использовании объекта и строки в качестве параметра для filter() заключается в том, как интерпретируются значения undefined и пустая строка в данном контексте.