获取当前现代Javascript中字符串的最后一个字符,允许使用代理对(两个代码单元)的星体字符,如表情符号

获取当前现代Javascript中字符串的最后一个字符,允许使用代理对(两个代码单元)的星体字符,如表情符号,javascript,string,unicode,surrogate-pairs,astral-plane,Javascript,String,Unicode,Surrogate Pairs,Astral Plane,不在基本多语言平面(BMP)中的Unicode字符(代码点)可能由两个字符(代码单元)组成,称为代理项对 “ab”是两个代码单元和两个代码点。(所以有两个字符和两个字符。) 'a扩展将把字符串分解为其代码点 […'a我从其他SO问题的答案中知道,Array.from()和带有/u标志的正则表达式都能正确处理非BMP Unicode字符,但我认为两者都不是最好的答案 也许我错了,所以这里有两个解决方案: Array.from() 设c=Array.from('a[...'a@Andreas:哦,

不在基本多语言平面(BMP)中的Unicode字符(代码点)可能由两个字符(代码单元)组成,称为代理项对

“ab”是两个代码单元和两个代码点。(所以有两个字符和两个字符。)


'a扩展将把字符串分解为其代码点


[…'a我从其他SO问题的答案中知道,
Array.from()
和带有
/u
标志的正则表达式都能正确处理非BMP Unicode字符,但我认为两者都不是最好的答案

也许我错了,所以这里有两个解决方案:

Array.from()


设c=Array.from('a
[...'a@Andreas:哦,天哪,这真的很难看,同时也非常漂亮。@Andreas:你真的应该把它作为一个答案。@hippietrail:我很想看看Andreas的spread方法和你的regex方法之间的性能比较。事实上,我很感兴趣,我做了一个,rex在Ch的V8上以相当大的优势获胜罗马,在Firefox的SpiderMonkey上有很多:我建议把它作为一个答案发布,并且(向Andreas道歉)接受它。可能还有其他我们都没有想到的方法。如果我的更快,我想我还是应该把它作为一个答案提交。我的问题也很容易扩展到第二部分。数组
。from
非常像Andreas',两者都使用字符串迭代器获取代码点数组,然后取t他是数组中的最后一个条目。(您的避免了随后对数组进行变异,这有助于提高性能。)不过,正则表达式更聪明,因为它尽可能多地将数组.from方法添加到JavaScript引擎的内部,以便对其进行优化“请查看必填字段,然后再次保存。”目前,我在老挝的网站速度非常慢。\-:不仅是你,也不仅仅是在老挝。jsPerf通常非常慢,甚至处于脱机状态。,
Array.from
是最慢的。(这并不奇怪,它是一种更复杂的方法,具有可选的映射函数。)