Почему не происходит запуск кода?

Что значит эта ошибка?

let obj = {
    a: 1,
    b: 2,
    c: 3,
};
function func(a, ...b) {
    console.log(a, b);
};
func(...obj); //Uncaught TypeError: Found non-callable @@iterator


Ответы (1 шт):

Автор решения: Grundy

Для использования spread при вызове функции, передаваемый объект должен быть итерируемым (иметь метод Symbol.iterator возвращающий итератор).

В данном случае передается обычный объект, у которого данного метода нет.

Для решения можно либо использовать массив, либо объявить недостающий метод:

let obj = {
    a: 1,
    b: 2,
    c: 3,
    [Symbol.iterator]: function*(){
      for(const entry of Object.values(this)){
        yield entry;
      }
    }
};
let arr = [1,2,3];
function func(a, ...b) {
    console.log(a, b);
};
func(...obj); 
func(...arr); 

→ Ссылка