为什么当我尝试使用split(...)运算符使用emoji表情拆分字符串时,在结果数组中出现“空洞”?

例子:[...'💪'] // -> ["💪", hole]
另外,更多的表情符号会产生更多的“空洞”:[...'💪💪'] // -> ["💪", "💪", hole, hole]
Chrome v71.0.3578.98的屏幕截图:

最佳答案

当然,这是一个错误。

作为一种解决方法,Array.from()的工作原理相同,只是它不是 buggy 。

> 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告诉您的,一些 native 代码搞砸了,无法正确初始化数组,而普通的javascript可能会产生“空”。)

是的,V8肯定让自己感到困惑:
> a=[...'\u{1f4a9}']
(2) ["💩", hole]
> hole=a[1]
undefined
> hole
VM384:1 Uncaught ReferenceError: hole is not defined

09-11 17:41