为什么"👍".long=2? [英] Why is "👍".length === 2?

查看:19
本文介绍了为什么"👍".long=2?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

浏览器中的任何文本区域如何处理显示为1个字符的2个字符?

例如:

"👍".length
// -> 2

此处有更多示例: https://jsbin.com/zazexenigi/edit?js,console

推荐答案

Java使用UTF-16(source)管理字符串。

在UTF-16中有1,112,064个可能的字符。现在,每个字符使用code points表示(*)。在UTF-16中,一个码点使用两个字节(16位)来保存。这意味着,对于一个代码点,只能有65536个不同的字符。

这意味着某些字符必须用两个代码点表示。

String.long()返回字符串中的代码单元数,而不是字符数。

MDN很好地解释了页面上关于String.length()的内容

此属性返回字符串中的代码单元数。UTF-16是JavaScript使用的字符串格式,它使用单个16位代码单元来表示最常用的字符,但对于不常用的字符需要使用两个代码单元,因此长度返回的值可能与字符串中的实际字符数不匹配。

(*):实际上,010000-03FFFF040000-10FFFF范围内的一些字符每个码点最多可以使用4个字节(32位),但这并不会改变答案:有些字符需要2个以上的字节来表示,因此它们需要超过1个码点。

这意味着一些需要16位以上的字符的长度无论如何都是1。和0x03FFFF一样,它需要21位,但它只使用了UTF-16中的一个码元,所以它的String.Length是1。

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
console.log(String.fromCharCode(0x03FFFF).length)

这篇关于为什么"👍".long=2?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆