需要一个可靠的String.fromCharCode替代品

时间:2009-06-21 11:28:36

标签: javascript

function randomString( len ) {
  // A random string of length 'len' made up of alphanumerics.
  var out = '';
  for (var i=0; i<len; i++) {
      var random_key = 48 + Math.floor(Math.random()*42); //0-9,a-z
      out += String.fromCharCode( random_key );
  }
  window.alert(out);
  return out;
}

据我所知,String.fromCharCode的结果取决于系统和/或浏览器。我见过的所有变通方法都是为了实际捕获密钥代码而不是生成密钥代码。有没有更可靠的方法来执行此操作(例如从ASCII代码转换?)。

3 个答案:

答案 0 :(得分:2)

  

var random_key = 48 +   Math.floor(的Math.random()* 42);   // 0-9,A-Z

代码和评论不对应。可能创建的字符在0-9,:,;,&lt;,=,&gt;,?,@和A-Z范围内。

此范围内的字符代码是ASCII字符集,因此它们对于所有常用的西方字符集都是相同的。 fromCharCode方法应该使用您为页面指定的字符集,但是在您使用的范围内并不重要。

使范围变小7,如果不是数字则增加39以获得0-9和a-z:

function randomString(len) {
   // A random string of length 'len' made up of alphanumerics.
   var out = '';
   for (var i=0; i<len; i++) {
      var random_key = 48 + Math.floor(Math.random() * 36);
      if (random_key > 57) random_key += 39;
      out += String.fromCharCode(random_key);
   }
   window.alert(out);
   return out;
}

答案 1 :(得分:1)

这里有一些-替代方案,可让您获得0-1a-z

let l= 30483235087530204251026473460499750369628008625670311705n.toString(36)

console.log(l[26], l[0], l[25].toUpperCase(), l);

答案 2 :(得分:1)

对于那些现在在场并想要替代 String.fromCharCode() 的人,请使用 TextDecoder()。示例如下:

//This gives back the String "Different" an unusual way
new TextDecoder().decode(new Uint8Array([68, 105, 102, 102, 101, 114, 101, 110, 116]));

//This gives back the String "Different" the usual way
String.fromCharCode(68, 105, 102, 102, 101, 114, 101, 110, 116);

可能还有其他几种方法可以实现这一点,但我注意到没有一个答案实际上回答了标题为的问题。所以......给你。