【发布时间】:2019-01-28 07:54:56
【问题描述】:
Simple (non-secure) hash function for JavaScript? 和 Generate a Hash from string in Javascript 中给出了在 JS 中生成散列函数的流行答案
代码的一个例子是:
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;
}
对我来说没有意义的一行是hash = ((hash<<5)-hash)+char;
有人可以解释为什么这样做吗?我收集到我们正在对哈希进行5 bit left shift。有什么理由为什么它是 5 位而不是 4 位或 6 位?另外,为什么我们要减去哈希并添加字符?
【问题讨论】:
-
很确定没关系 - 这只是将字符串转换为哈希的一种方法的示例。您可以使用您喜欢的任何算法,使用您喜欢的任何移位、加法、减法等。
标签: javascript hash bitwise-operators