考虑 charAt()
、charCodeAt()
和 codePointAt()
我发现参数含义之间存在差异。在我真正考虑之前,我认为访问 length
-1 的字符总是安全的。但我读到 charCodeAt() 和 codePointAt() 之间的区别是 charCodeAt() 指的是 16 位(字节对)所以除了阅读 i
你还需要 i+1
如果它们是代理对(与 UTF-16 的方法一样)。而 codePointAt() 需要一个引用 UTF-8 字符位置(从零开始)的参数。所以现在我很困惑 length
是计算字符数还是 UTF-16 样式的字节对数。我相信 JavaScript 将字符串保存为 UTF-16,但是使用 length
-1 在具有大量 4 字节字符的字符串上使用 codePointAt()
函数将是关闭字符串的末尾!!
最佳答案
length
的 strings以16 位无符号整数值(“元素”) 或代码单元(它们一起构成有效或无效的 UTF16 代码单元序列)计算,其索引也是如此.我们也可以称它们为“字符”。
是否访问它们并不重要as properties或通过 charAt
, chatCodeAt
和 codePointAt
, length - 1
将永远是一个有效的索引。然而,代码点可能被编码为跨越两个索引的代理对。没有内置方法来测量它们的数量,但默认的字符串迭代器会生成它们,因此您可以使用 for ... of
循环来计算它们。
关于javascript - JavaScript 字符串的安全长度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42708864/