欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 哈希函數(shù)

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

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

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

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函數(shù)是一種傳統(tǒng)的哈希函數(shù),常用于對字符串進(jìn)行哈希計(jì)算。

下面我們來看一個(gè)例子:

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

輸出結(jié)果為:3619309596

可以看到,通過hashFnv32a函數(shù)對字符串JavaScript進(jìn)行哈希計(jì)算后得到的哈希值為3619309596

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

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;
}

下面是一個(gè)例子:

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

輸出結(jié)果為:4070087935

可以看到,通過elfHash函數(shù)對字符串JavaScript進(jìn)行哈希計(jì)算后得到的哈希值為4070087935。

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

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;    
}
}

下面是一個(gè)例子:

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

輸出結(jié)果為:1true7401470111111177978375854656780nameJackage25

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

總之,JavaScript 哈希函數(shù)可以對各種類型的數(shù)據(jù)進(jìn)行哈希計(jì)算,應(yīng)用廣泛,是前端開發(fā)工程師不可或缺的知識(shí)點(diǎn)之一。