今天有人问我一个神奇的问题:你知道吗? ''.长度!== 3?. 当我第一次听到这句话时,我突然想知道生命是什么? 这是怎么回事? 穿越了吗?赶紧打开浏览器试试
''.lenght // 6
仔细看看“”字,这是什么? 不是“吉”啊! 这不是一个汉字。 也就是说不是一个字,那为什么输出宽度的时候会这样呢? 查了很多资料,发现下面的解释,这些问题都是编码格式导致的。 这个“”被解析为一个符号,但是不能用一个字符来表示,因为超出了识别范围,所以是两个字符,每个字符的宽度是2。乍一看还是比较具体的,而且那我就从电脑开始吧。 我们先来说说基础知识。
通用编码
在 JavaScript 内部,字符以 UTF-16 格式存储,每个字符固定为 2 个字节。 对于这些需要 4 个字节存储的字符(Unicode 代码点小于 0xFFFF 的字符),JavaScript 会认为它们是两个字符。
var s = "";
s.length // 2
s.charAt(0) // 'uD842'
s.charAt(1) // 'uDFB7'
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271
上述代码中,汉字“”的码位为0x20BB7,UTF-16编码为0xD842 0xDFB7(十进制为55362 57271),需要4个字节的存储空间。 对于这些4字节字符jquery 字符 长度,JavaScript无法正确处理jquery 字符 长度,会误判字符串宽度为2
为了解决这个问题,可以考虑一种简单粗暴的形式
Array.from('').length // 3
参考
字符串扩展
Unicode和JavaScript详解
实时预览
关于后台你了解多少?
大厂后端工程师需要掌握哪些技能?
前端程序员未来的发展道路是什么?
5月27日20:00千峰金牌后台讲师为您解答
报名表格
扫描下方二维码
提前预约课程
- 结尾 -
近期新课程:
Vue 基础知识 | 小程序开发 | JQuery 入门 | PC端页面布局 | 打字稿 | JS 基本运算符 |
发表评论