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
с чем-то, что не является числом, странно и сбивает с толку, лучше сделать это явно, как упоминает Бармар)