我有一个常量元素,其中只有字母。
我只需要通过索引输出所请求的字母。
这是一个简单的片段来说明我的意思:
// 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 代码单元表示,需要使用一对。例如,"😉".length
是 2
,因为该表情符号需要两个代码单元。)
如果您使用的是现代环境,并且希望使用字符串文字来简单地编写字母,但需要处理代码点问题,则可以从字符串创建数组,如下所示:
const letters = [..."abcd"];
字符串在现代环境中是可迭代的,并且它们迭代代码点,而不是代码单元。
关于javascript - 我应该使用数组还是字符串来存储字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49919835/