Верните true из функции foo и структурируйте ее с помощью оператора OR.
function foo() { return true; } var [a, b, c] = foo() || [];
Почему выдается ошибка, например, foo не является функцией.
Фактическая ошибка на самом деле: TypeError: foo is not a function or its return value is not iterable.
TypeError: foo is not a function or its return value is not iterable
Это связано с тем, что выполнение не достигнет оператора OR, поскольку результат foo() не равен false-y (это на самом деле true).Следовательно, javascript пытается деструктурировать true, что дает вам TypeError
foo()
true
Похоже на ошибку в отчете об ошибках V8:
function foo() { return true; } var [a] = foo() ; // Uncaught TypeError: foo is not a function or its return value is not iterable var [a] = foo() || []; // Uncaught TypeError: foo is not a function
Firefox правильно сообщает, что «не повторяется» в обоих случаях.