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

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

Если при использовании метода filter в качестве функции обратного вызова передается функция, которая обращается к объекту по ключу, который отсутствует, то при попытке обратиться к несуществующему свойству объекта возвращается значение undefined. Это происходит потому, что JavaScript, в отличие от некоторых других языков программирования, не вызывает ошибку при попытке обращения к несуществующему свойству объекта.

Пример кода, который приведет к возвращению undefined при обращении к несуществующему ключу объекта в параметре filter метода:

const data = [
  { name: 'Alice' },
  { name: 'Bob' }
];

// Попытка фильтрации по несуществующему ключу объекта
const filteredData = data.filter(item => item.age > 20);  
console.log(filteredData); // Вернет [] - пустой массив

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

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

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

// Фильтрация по существующему ключу объекта
const filteredData = data.filter(item => item.name === 'Alice');
console.log(filteredData); // Вернет [{ name: 'Alice', age: 30 }]

Таким образом, при использовании метода filter в JavaScript важно учитывать наличие ключей, к которым вы обращаетесь, чтобы избежать возвращения undefined и нежелательного поведения программы.