-1

以下两个操作之间有什么区别,其中一个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 
}, '');
4

1 回答 1

2

String.fromCharCode接受多个参数。每个参数将被解释为一个代码单元。在第一个代码中,since.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 提到的那样明确地做到这一点)

于 2020-04-12T02:02:28.980 回答