色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript 哈希函數

李中冰1年前8瀏覽0評論

在前端開發中,JavaScript 哈希函數起到了很重要的作用。哈希函數將輸入值轉換為固定長度的字符串(哈希值),通常用于數據加密、數據校驗、密碼管理等領域。下面我們來詳細了解一下 JavaScript 哈希函數。

JavaScript 中的哈希函數種類很多,比較常見的有:

function hashFnv32a(str) {
let hash = 0x811c9dc5;
for (let i = 0; i< str.length; i++) {
hash ^= str.charCodeAt(i);
hash += (hash<< 1) + (hash<< 4) + (hash<< 7) + (hash<< 8) + (hash<< 24);
}
return hash >>>0;
}

其中,hashFnv32a函數是一種傳統的哈希函數,常用于對字符串進行哈希計算。

下面我們來看一個例子:

const str = 'JavaScript';
const hash = hashFnv32a(str);
console.log(hash);

輸出結果為:3619309596

可以看到,通過hashFnv32a函數對字符串JavaScript進行哈希計算后得到的哈希值為3619309596

不同的哈希函數有不同的哈希值計算方法。例如,下面的elfHash函數計算字符串哈希值的方法如下:

function elfHash(str) {
let hash = 0, i;
for (i = 0; i< str.length; i++) {
hash = (hash<< 4) + str.charCodeAt(i);
let x = hash & 0xF0000000;
if (x != 0) {
hash ^= x >>24;
}
hash &= ~x;
}
return hash >>>0;
}

下面是一個例子:

const str = 'JavaScript';
const hash = elfHash(str);
console.log(hash);

輸出結果為:4070087935

可以看到,通過elfHash函數對字符串JavaScript進行哈希計算后得到的哈希值為4070087935

除了字符串,JavaScript 哈希函數還可以對數字、布爾值、數組、對象等數據類型進行哈希計算。例如,下面的simpleHash函數可以對數字、布爾值、字符串等數據類型進行哈希計算:

function simpleHash(value) {
if (typeof value === 'number' || typeof value === 'boolean') {
return value.toString();
} else if (typeof value === 'string') {
let hash = 0;
for (let i = 0; i< value.length; i++) {
hash += value.charCodeAt(i) * (i + 1);    
}
return hash.toString();
} else if (Array.isArray(value)) {
let hash = '';
for (let i = 0; i< value.length; i++) {
hash += simpleHash(value[i]);
}
return hash;  
} else if (typeof value === 'object') {
let hash = '';
for (let key in value) {
if (value.hasOwnProperty(key)) {
hash += key + simpleHash(value[key]);
}
}
return hash;    
}
}

下面是一個例子:

const data = [1, true, 'JavaScript', { name: 'Jack', age: 25 }];
const hash = simpleHash(data);
console.log(hash);

輸出結果為:1true7401470111111177978375854656780nameJackage25

可以看到,通過simpleHash函數對數組[1, true, 'JavaScript', { name: 'Jack', age: 25 }]進行哈希計算后得到的哈希值為1true7401470111111177978375854656780nameJackage25

總之,JavaScript 哈希函數可以對各種類型的數據進行哈希計算,應用廣泛,是前端開發工程師不可或缺的知識點之一。