javascript - 我应该使用数组还是字符串来存储字母

标签 javascript

我有一个常量元素,其中只有字母。
我只需要通过索引输出所请求的字母。

这是一个简单的片段来说明我的意思:

// As array
const arr = ["a", "b", "c", "d"];
for (i = 0; i < 4; i++) {
  console.log(arr[i]);
}

// As string
const str = "abcd";
for (i = 0; i < 4; i++) {
  console.log(str[i]);
}

这两种方式似乎都运作良好。
所以,我发现自己在想“嗯。”我应该使用数组还是字符串?”。

能够给出有关此选择的客观答案的技术限制是什么?

最佳答案

如果这些字母都用单个 UTF-16 代码单元表示(例如,所有英文字母都是),那么完全取决于您是否使用带有 [ 的数组n] 或带有 [n].charAt(n) 的字符串。

如果“字母”并非全部用单个 UTF-16 代码单元表示(例如,如果它们确实是表情符号),那么最好使用数组,因为如果您使用字符串,则必须使用 .codePointAt(n) (这是相对较新的)并且(令人困惑!)你必须弄清楚要使用什么 n (因为 codePointAt(n) 不是“给我第n个代码点”,而是“给我字符串索引n处的代码点”——例如,n仍然被测量以代码单位为单位,而不是代码点。然后您必须通过String.fromCodePoint运行它才能取回“字母”。

(这是因为 JavaScript strings 不是字符串字符,它们是 UTF-16 代码单元的字符串[容忍无效的代理对]。某些字符[Unicode 称之为“代码点”]无法用单个 UTF-16 代码单元表示,需要使用一对。例如,"😉".length2,因为该表情符号需要两个代码单元。)

如果您使用的是现代环境,并且希望使用字符串文字来简单地编写字母,但需要处理代码点问题,则可以从字符串创建数组,如下所示:

const letters = [..."abcd"];

字符串在现代环境中是可迭代的,并且它们迭代代码点,而不是代码单元。

关于javascript - 我应该使用数组还是字符串来存储字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49919835/

相关文章:

javascript - 如何确保预加载器覆盖整个高度并且没有可见的加载页面元素?

javascript - 如何使用 x-init 使用 AlpineJS 设置下拉选项的 'selected' 属性

javascript - 我的 while 循环接受它不应该接受的答案。为什么?

Javascript 拖放 : ondragleave working solution?

javascript - 动态变量名,避免 eval()

javascript - 如何使用javascript adodb连接在 GridView 中显示sql server数据

javascript - iframe anchor 链接在src跳转

javascript - 隐藏/显示位置 :fixed container under non-fixed containers

javascript - TSLint,强制导入语句中括号之间的间距

javascript - Node.Js 中的异步问题 - 如何执行一系列操作?