You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript charCodeAt相关问题:0xd7ff、0xe000及码点计算逻辑解析

代码逻辑与常量含义解析

两个边界常量的作用

0xd7ff和0xe000是UTF-16编码体系里代理区间的上下边界:

  • Unicode为了兼容UTF-16编码规则,在基本多语言平面(BMP,码点范围0x0000`0xFFFF`)中预留了`0xD800`0xDFFF共2048个码位,专门用于表示超出BMP范围的补充平面字符(也就是需要两个16位码元存储的字符,比如部分emoji、生僻汉字),这个区间不会分配给任何独立的有效字符。
  • 0xd7ff是代理区间之前最后一个有效BMP字符的码点值,0xe000是代理区间之后第一个有效BMP字符的码点值。

代码中if (code <= 0xd7ff || code >= 0xe000) return code的判断逻辑,就是识别当前位置取到的码元是不是独立的单码元字符,如果是就直接返回对应码点,不需要做拼接计算。

代理对计算公式的作用

(code << 10) + next - 0x35fdc00是手动计算UTF-16代理对对应真实Unicode码点的简化实现,用来给不支持原生codePointAt方法的老旧JS环境做兼容:

  1. 如果当前位置的码元落在代理区间内,说明它是代理对的前导(高)代理码元,需要和下一个位置的尾随(低)代理码元组合,才能得到字符的真实码点。
  2. UTF-16代理对转码点的标准换算规则为:
真实码点 = (高代理码元 - 0xD800) * 1024 + (低代理码元 - 0xDC00) + 0x10000
  1. 把标准公式展开后合并所有常数项计算:-0xD800 * 1024 - 0xDC00 + 0x10000的结果正好是-0x35fdc00,而左移10位等价于乘以1024,因此公式可以简化为代码中的写法,计算结果和标准规则完全一致。

补充说明:开头定义的nonASCIIwhitespace正则,用于匹配ASCII空白字符(空格、制表符、换行符等)之外的特殊空白字符,包括排版用窄空格、全角空格、零宽格式符、字节顺序标记等。


内容的提问来源于stack exchange,提问作者cui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:36:26