我可以将数组传递给fromCharCode

Nic*_*ick 23 javascript arrays fromcharcode

我可能会在这里提出错误的问题,所以如果答案是在另一个问题上,我会道歉......但我一直无所顾忌.

在一个片段中,为什么这不起作用?

array = [72,69,76,76,79];
document.write(String.fromCharCode(array));
Run Code Online (Sandbox Code Playgroud)

我正在收集数组中的关键事件,并希望能够在提示时将它们写为字符.虽然这有效:

document.write(String.fromCharCode(72,69,76,76,79));
Run Code Online (Sandbox Code Playgroud)

当我把它作为一个数组传递时,我似乎无法使它工作.我也尝试先将数组转换为String(),以及array.join(","); 创建逗号分隔列表......但没有.有任何想法吗?有没有更好的方法将我在数组中收集的值转换为字符?

ale*_*lex 36

你可以使用函数的apply()方法......

document.write(String.fromCharCode.apply(null, array));
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

ES6可以使用传播运营商......

document.write(String.fromCharCode(...array));
Run Code Online (Sandbox Code Playgroud)

您也可以使用数组的reduce()方法,但较旧的IE不支持它.你可以填充它,但apply()更好地支持该方法.

document.write(array.reduce(function(str, charIndex) {
    return str += String.fromCharCode(charIndex);
}, ''));?
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

  • 记下这个技巧有潜在危险的说法.如果您尝试以这种方式构造非常长的字符串(例如,为base64编码准备ArrayBuffer),您将有一个范围异常. (5认同)

Pau*_*aul 9

是的,您可以使用apply()来调用作为参数传入的数组的函数:

array = [72,69,76,76,79];
document.write(String.fromCharCode.apply(String, array));
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢:`String.fromCharCode.apply(window.navigator.geolocation.getCurrentPosition,array)` (4认同)