我需要将字符串转换为某种形式的哈希.这在JavaScript中可行吗?
我没有使用服务器端语言,所以我不能这样做.
我在这里和那里看到一些关于修改JavaScript对象原型的不满意的评论?我个人不知道这可能是一个什么问题.例如,扩展Array对象以具有map和include方法或创建更强大的Date方法?
在 JavaScript 的简单(非安全)散列函数中给出了在 JS 中生成散列函数的流行答案?并在Javascript中从字符串生成哈希
代码示例之一是:
String.prototype.hashCode = function() {
var hash = 0;
if (this.length == 0) {
return hash;
}
for (var i = 0; i < this.length; i++) {
var char = this.charCodeAt(i);
hash = ((hash<<5)-hash)+char;
hash = hash & hash; // Convert to 32bit integer
}
return hash;
}
Run Code Online (Sandbox Code Playgroud)
对我来说没有意义的一行是 hash = ((hash<<5)-hash)+char;
有人可以解释为什么要这样做吗?我认为我们正在5 bit left shift对哈希进行处理。有什么理由为什么它是 5 位而不是 4 位或 6 位吗?另外为什么我们然后减去散列并添加字符?