Ответ 1
Конечно, это ошибка.
В качестве обходного пути Array.from()
работает идентично, за исключением того, что он не глючит.
> s="\uD83C\uDF1F\u5FCD\u8005\u306E\u653B\u6483\uD83C\uDF1F"
> [...s]
(9) ["🌟", "忍", "者", "の", "攻", "撃", "🌟", hole, hole]
> Array.from(s)
(7) ["🌟", "忍", "者", "の", "攻", "撃", "🌟"]
Похоже, исправление в Chrome 72, но вы можете открыть ошибку в Chromium и попросить объединить ее с 71.
Исправление и контрольный пример находятся здесь: https://crrev.com/902d21dd661033427b56d5f93c12b12339bf55ab
(Я полагаю, что "дыра" в V8 говорит вам, что какой-то нативный код облажался и не смог правильно инициализировать массив, в отличие от "пустого", который может быть создан обычным javascript.)
Да, V8 определенно запутался:
> a=[...'\u{1f4a9}']
(2) ["💩", hole]
> hole=a[1]
undefined
> hole
VM384:1 Uncaught ReferenceError: hole is not defined