Распространение любого «пустого» значения в объект допустимо (не выдает ошибку, а вместо этого становится своего рода отсутствием операции):
{
...undefined,
...null,
...false,
...true,
...'',
...{},
...[],
...Symbol(),
...() => {},
} // evaluates to {}
Но выполнение того же в массиве выдает ошибку для всех вышеуказанных значений, кроме ''
и []
. В сообщении об ошибке говорится, что значения, которые не работают, не являются итерируемыми, однако они явно являются итерируемыми в том смысле, что их можно распространить на объект. Конечно, интуитивно понятно, что строки, массивы и объекты могут быть преобразованы в пары записи/ключ-значение при распространении в объект и преобразованы в значения при распространении в массив, но даже в этом случае, почему записи всех этих значения могут быть итерируемыми, но значения не могут быть? Если записи являются итерируемыми, не должны ли быть такими же и значения? Это просто особенность разных движков JavaScript? Что тут происходит?