«Отверстия» в массиве при использовании оператора растяжения es6 в строке с эмодзи - PullRequest
0 голосов
/ 17 декабря 2018

Почему, когда я пытаюсь разбить строку с помощью эмодзи (ов), используя оператор распространения (...), я получаю "дыры" в массиве результатов?

Пример: [...'?'] // -> ["?", hole]

Также большеEmojis создает больше «дыр»: [...'??'] // -> ["?", "?", hole, hole]

Снимок экрана из Chrome v71.0.3578.98:

1 Ответ

0 голосов
/ 17 декабря 2018

Конечно, это ошибка.

В качестве обходного пути, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...