使用String.fromCharCode时,为什么我得到\ u0000而不是字符?

时间:2017-08-02 23:48:31

标签: javascript fromcharcode

第一次提出问题 - 我是一个菜鸟 - 我找不到解决这个问题。

目标是解码凯撒密码。我的代码可以将正确的字母代码放入数组中。 我可以手动将该数组转换为正确的字符串,如下所示:

String.fromCharCode(89, 79, 85, 32, 68, 73, 68, 32, 73, 84, 33);

但是当我尝试将数组转换为这样的字符串时:

  return String.fromCharCode(arr.join(", "));

它返回\ u0000 - 我收集的是unicode null字符。

有人可以解释一下发生了什么吗?

这是我的完整代码:



function rot13(str) {
  var arr = [];
  for (var i = 0; i < str.length; i++){
    if (str.charCodeAt(i) > 77 && str.charCodeAt(i) < 91){
      arr.push(str.charCodeAt(i) - 13);
    } else if (str.charCodeAt(i) <=77 && str.charCodeAt(i) > 64) {
      arr.push(str.charCodeAt(i) + 13);
    } else {
      arr.push(str.charCodeAt(i));
    }
  }
  console.log(arr);
  return String.fromCharCode(arr.join(", "));
}

rot13("LBH QVQ VG!");
String.fromCharCode(89, 79, 85, 32, 68, 73, 68, 32, 73, 84, 33);
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:3)

arr.join(',')不会扩展为函数的参数列表。您需要使用Function.apply.apply(null, arr))或者如果您有ES6可用,请使用spread operator

return String.fromCharCode(...arr);

return String.fromCharCode.apply(null, arr);

function rot13(str) {
  var arr = [];
  for (var i = 0; i < str.length; i++){
    if (str.charCodeAt(i) > 77 && str.charCodeAt(i) < 91){
      arr.push(str.charCodeAt(i) - 13);
    } else if (str.charCodeAt(i) <=77 && str.charCodeAt(i) > 64) {
      arr.push(str.charCodeAt(i) + 13);
    } else {
      arr.push(str.charCodeAt(i));
    }
  }

  return String.fromCharCode.apply(null, arr);
}

console.log(rot13("LBH QVQ VG!"));