在 JavaScript 中,join 与 += 对字符串处理 utf 编码有何不同?
In JavaScript, how does join vs += on a string handle utf encodings differently?
以下两个操作之间的区别是什么,一个 join
导致 "÷C "
,另一个减少 "÷C"
?
1
// returns "÷C "
["f7","43"].map(x=>'0x'+ x).map(String.fromCharCode).join('');
2
// returns "÷C"
["f7","43"].map(x=>'0x'+x).reduce((a, c) => {
a += String.fromCharCode(c);
return a
}, '');
String.fromCharCode
接受多个参数。每个参数将被解释为一个代码单元。在第一个代码中,由于 .map
还为索引和正在迭代的数组提供了参数:
["f7","43"].map(x=>'0x'+ x).map(String.fromCharCode).join('');
相当于
["f7","43"]
.map(x=>'0x'+ x)
.map((str, i, arr) => (
String.fromCharCode(str, i, arr)
)
.join('');
结果出乎意料。
显式传递 仅 而不是 str
,结果与第二个代码段相同:
const result = ["f7","43"]
.map(x=>'0x'+ x)
.map((str) => (
String.fromCharCode(str)
))
.join('');
console.log(result);
(仍然,用不是数字的东西调用 fromCharCode
是奇怪和令人困惑的,最好像 Barmar 提到的那样明确地做)
以下两个操作之间的区别是什么,一个 join
导致 "÷C "
,另一个减少 "÷C"
?
1
// returns "÷C "
["f7","43"].map(x=>'0x'+ x).map(String.fromCharCode).join('');
2
// returns "÷C"
["f7","43"].map(x=>'0x'+x).reduce((a, c) => {
a += String.fromCharCode(c);
return a
}, '');
String.fromCharCode
接受多个参数。每个参数将被解释为一个代码单元。在第一个代码中,由于 .map
还为索引和正在迭代的数组提供了参数:
["f7","43"].map(x=>'0x'+ x).map(String.fromCharCode).join('');
相当于
["f7","43"]
.map(x=>'0x'+ x)
.map((str, i, arr) => (
String.fromCharCode(str, i, arr)
)
.join('');
结果出乎意料。
显式传递 仅 而不是 str
,结果与第二个代码段相同:
const result = ["f7","43"]
.map(x=>'0x'+ x)
.map((str) => (
String.fromCharCode(str)
))
.join('');
console.log(result);
(仍然,用不是数字的东西调用 fromCharCode
是奇怪和令人困惑的,最好像 Barmar 提到的那样明确地做)