javascript - JavaScript 字符串的安全长度是多少?

标签 javascript arrays utf-8 utf-16

考虑 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() 函数将是关闭字符串的末尾!!

最佳答案

lengthstrings16 位无符号整数值(“元素”)代码单元(它们一起构成有效或无效的 UTF16 代码单元序列)计算,其索引也是如此.我们也可以称它们为“字符”。

是否访问它们并不重要as properties或通过 charAt , chatCodeAtcodePointAt , length - 1 将永远是一个有效的索引。然而,代码点可能被编码为跨越两个索引的代理对。没有内置方法来测量它们的数量,但默认的字符串迭代器会生成它们,因此您可以使用 for ... of 循环来计算它们。

关于javascript - JavaScript 字符串的安全长度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42708864/

相关文章:

javascript - 简单的 JavaScript 查询

java - 方法中数组的值无法返回到 main (java)

php - 使用php将阿拉伯语文本存储在mysql数据库中

javascript - 在 PHP 中使用 Javascript 删除类

javascript - 如何在我的网站上使用单独的 javascript 文件

javascript - 在 Meteor 中如何创建通用事件处理程序?

java - 数组的反向输出未按预期工作

php - 将两个数组中的行插入到php中的mysql表中

java - 有没有更好的方法将包含 UTF-8 字节码的 String 转换为 UTF-8 字符串?

python - 如何在python中将unicode转换为utf8?