用户ID函数JavaScript

用户ID函数JavaScript,javascript,string,hash,Javascript,String,Hash,我试图从userAgent和Date函数中生成一个UserID。我还想了解回调函数(我仍然没有得到(jsnoob))。因此,我构建了以下示例: var storage = window.localStorage; var storageUserId = storage.getItem("userID"); var text = ""; function userID(callback){ var agent = window.navigator.userAgent; var n

我试图从userAgent和Date函数中生成一个UserID。我还想了解回调函数(我仍然没有得到(jsnoob))。因此,我构建了以下示例:

var storage = window.localStorage; 
var storageUserId = storage.getItem("userID"); 
var text = "";  

function userID(callback){
  var agent = window.navigator.userAgent;
  var now = new Date(); 
    try{
        callback(agent, now);
    }catch(e){}
}

function hasher(agent,now){
    var hash = 0;
    var arr = []; 
    for(var i = 0; i < arguments.length; i++){
      var pars = arguments[i]; 
      for(var j = 0; j < pars.length; j++){
         var charI = pars.charCodeAt(j);
         hash = ((hash<<5)-hash)+charI;
         hash = hash & hash; // Convert to 32bit integer
         hash = hash.toString();
      }
    }
  console.log(hash + "|" + hash);
}

userID(hasher);
var storage=window.localStorage;
var storageUserId=storage.getItem(“userID”);
var text=“”;
函数userID(回调){
var agent=window.navigator.userAgent;
var now=新日期();
试一试{
回调(代理,现在);
}捕获(e){}
}
函数哈希器(代理,现在){
var散列=0;
var-arr=[];
for(var i=0;ihash=((hash您应该将哈希循环提取到一个新函数中:

function hash(str){
  var hash = 0;
  for(const char of str){        
    const charCode =  char.charCodeAt(0);            
    hash = ((hash<<5)-hash)+charCode;
  }
  hash = hash & hash; // Convert to 32bit integer

  return hash.toString();
}

(PS:您知道新日期将每毫秒更改一次吗?

那么实际的问题是什么呢?如果您想同时管理多个
hasher()
备选方案,那么回调包装器不是必需的,而且只需要。
hash
在每次迭代中都会得到不同的值。执行
hash+“|”+哈希
您只需输出上一次迭代的结果两次。谢谢!@JonasW。我应该如何重写哈希+“|”+哈希格式“9834917834 | 8293479273”出来了?太好了!是的,我知道。嗨,乔纳斯,还有一个问题:我不能使用ECMA脚本。有没有其他方法来编写哈希函数?谢谢!@Toni2708什么?你知道javascript是ECMAscript吗?谷歌标签管理器不支持ECMA脚本功能。这就是我问的原因。它支持什么?
function getUserID(){
  return hash(window.navigator.userAgent) + "|" + hash("" + new Date);
}