为什么";👍;";.long=2? [英] Why is "👍".length === 2?
本文介绍了为什么";👍;";.long=2?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
浏览器中的任何文本区域如何处理显示为1个字符的2个字符?
例如:
"👍".length
// -> 2
此处有更多示例: https://jsbin.com/zazexenigi/edit?js,console
推荐答案
在UTF-16中有1,112,064个可能的字符。现在,每个字符使用code points表示(*)。在UTF-16中,一个码点使用两个字节(16位)来保存。这意味着,对于一个代码点,只能有65536个不同的字符。这意味着某些字符必须用两个代码点表示。
String.long()返回字符串中的代码单元数,而不是字符数。
MDN很好地解释了页面上关于String.length()的内容
此属性返回字符串中的代码单元数。UTF-16是JavaScript使用的字符串格式,它使用单个16位代码单元来表示最常用的字符,但对于不常用的字符需要使用两个代码单元,因此长度返回的值可能与字符串中的实际字符数不匹配。
(*):实际上,010000-03FFFF和040000-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屋!
查看全文