考虑到
charAt()
, charCodeAt()
, 和codePointAt()
,我发现参数的含义存在差异。在真正思考之前,我认为你总是可以安全地访问length
-1处的字符。但是,我了解到charCodeAt()和codePointAt()之间的区别在于,charCodeAt()是16位(字节对),因此除了读取i
之外,如果它们是代理对(如UTF-16的方法),还需要i+1
。而codePointAt()需要一个引用UTF-8字符位置(从零开始)的参数。所以现在我陷入了一个困境,不确定length
计算的是字符数还是字节对数,像UTF-16这样。我相信JavaScript将字符串保存为UTF-16,但是在使用codePointAt()
函数处理具有大量4字节字符的字符串时,从length
-1处开始会超出字符串的末尾!