我应该使用数组或字符串来存储字母

时间:2018-04-19 11:21:59

标签: 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]);
}
&#13;
&#13;
&#13;

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

有哪些技术限制可以为此选择提供客观答案?

1 个答案:

答案 0 :(得分:2)

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

如果“字母”并非都用单个UTF-16代码单元表示(例如,如果它们真的是表情符号),那么你最好使用数组,因为如果你使用了字符串,那么你我必须使用.codePointAt(n)(这是相对较新的)和(令人困惑!)你必须弄清楚.charAt(n)要使用什么(因为n 不是< / strong>“给我第n个代码点”,它是“给我字符串索引 n 的代码点” - 例如,codePointAt(n)仍以代码单位进行测量,而不是代码点。然后你必须通过n来运行它才能得到“信件”。

(这是因为JavaScript strings不是字符的字符串,它们是UTF-16代码单元的字符串[容忍无效的代理对]。一些字符[Unicode调用的是什么“代码点“]不能用单个UTF-16代码单元表示,而是需要一对代码。例如,String.fromCodePoint"".length,因为表情符号需要两个代码单元。)

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

2

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