我可能会在这里提出错误的问题,所以如果答案是在另一个问题上,我会道歉......但我一直无所适从。
在一个片段中,为什么这不起作用?
array = [72,69,76,76,79];
document.write(String.fromCharCode(array));
我正在收集数组中的关键事件,并希望能够在提示时将它们写为字符。虽然这有效:
document.write(String.fromCharCode(72,69,76,76,79));
当我将它作为一个数组传递时,我似乎无法使它工作。我也尝试先将数组转换为String(),以及array.join(“,”);创建逗号分隔列表......但没有。有任何想法吗?有没有更好的方法将我在数组中收集的值转换为字符?
答案 0 :(得分:35)
您可以使用函数的apply()
方法...
document.write(String.fromCharCode.apply(null, array));
ES6可以使用点差运算符......
document.write(String.fromCharCode(...array));
您也可以使用数组的reduce()
方法,但较旧的IE不支持它。你可以 shim 它,但更好地支持apply()
方法。
document.write(array.reduce(function(str, charIndex) {
return str += String.fromCharCode(charIndex);
}, ''));
答案 1 :(得分:9)
是的,你可以使用apply()来调用一个数组作为参数传入的函数:
array = [72,69,76,76,79];
document.write(String.fromCharCode.apply(String, array));
答案 2 :(得分:3)
如果你使用.apply()
来调用fromCharCode()
函数,你可以传递一个数组,该数组将被转换为函数的参数,如下所示:
document.write(String.fromCharCode.apply(this, array));
您可以在此处查看:http://jsfiddle.net/jfriend00/pfLLZ/
答案 3 :(得分:1)
该方法更适合这样使用:
document.write(String.fromCharCode(72,69,76,76,79));
当方法需要多个参数作为列表时,您将传入一个数组。
答案 4 :(得分:0)
您可能必须按如下方式使用循环
for(var i = 0; i < array.length; i++)
document.write(String.fromCharCode(array[i]));
}
答案 5 :(得分:-1)
以下是我要做的两种方式:
var arr=[119,119,119,46,87,72,65,75,46,99,111,109];
document.write(eval('String.fromCharCode('+arr+')'));
document.write('<hr>');
var arr='119,119,119,46,87,72,65,75,46,99,111,109';
document.write(eval('String.fromCharCode('+arr+')'));
&#13;
答案 6 :(得分:-1)
这是一个功能:
var unCharCode = function(x) {
return this["eval"]("String['fromCharCode'](" + x + ")");
};
document.write(unCharCode([ 119, 119, 119, 46, 87, 72, 65, 75, 46, 99, 111, 109 ]));
document.write("<hr>");
document.write(unCharCode("119,119,119,46,87,72,65,75,46,99,111,109"));
&#13;