關(guān)于JS的手動類型轉(zhuǎn)換,parseInt是我們最早接觸的函數(shù)之一。
接下來我們詳細(xì)的總結(jié)一下它的用法,你可以點(diǎn)擊收藏,以備不時(shí)之需。
parseInt()
作用是將參數(shù)(通常為字符串)強(qiáng)制轉(zhuǎn)換為整數(shù)。
它有兩個(gè)參數(shù),第二個(gè)可以省略,我們先展示常見的用法
1. 轉(zhuǎn)換規(guī)則:依次將字符串中從左到右的數(shù)字部分轉(zhuǎn)為整數(shù),一旦轉(zhuǎn)換失敗,返回NaN。
(1) 參數(shù)是字符串類型:
var a = parseInt(‘10’); //將字符串轉(zhuǎn)成整數(shù)類型
console.log(a); // 10
var b = parrseInt(‘10true’); //將有效數(shù)字部分轉(zhuǎn)為整數(shù),提取開頭數(shù)字部分
console.log(b); // 10
var c = parseInt(‘10true20’); //只將開頭有效部分轉(zhuǎn)為整數(shù)
console.log(c); //10
var d = parseInt(‘045zoo’); //開頭部分轉(zhuǎn)為整數(shù),數(shù)字前面的0省略
console.log(d); //45
var f = parseInt(‘34.5’); //整數(shù)部分,小數(shù)點(diǎn)非數(shù)字部分,舍去
console.log(f); //34
var g = parseInt(‘a3’); //若不是以數(shù)字開頭,轉(zhuǎn)為NaN(Not a Number 不是數(shù)字)的特殊數(shù)值
console.log(g); //NaN
(2) 參數(shù)是數(shù)字類型:
var a = parseInt(3.4); //依然轉(zhuǎn)為數(shù)字,但是取整
console.log(a); //3
(3) 其它數(shù)據(jù)類型:只要開頭不包含有效數(shù)字,結(jié)果都轉(zhuǎn)為NaN
var a = parseInt(true);
console.log(a); //NaN
var b = parseInt(null);
console.log(b); //NaN
var c = parseInt(undefined);
console.log(c); //NaN
var d = parseInt([]);
console.log(d); //NaN
var e = parseInt({});
console.log(e); //NaN
接下來,我們看第二個(gè)參數(shù)的用法
第二個(gè)參數(shù):表示進(jìn)制,范圍2~36(用來說明第一個(gè)參數(shù)的進(jìn)制規(guī)則)
var a = parseInt(‘99’,10); // 如果字符串為十進(jìn)制內(nèi)容,該參數(shù)可省略
console.log(a); // 99
var a = parseInt(‘1001’,2); // ‘1001’ 符合二進(jìn)制規(guī)則, 轉(zhuǎn)為十進(jìn)制整數(shù)
console.log(a); // 9
var a = parseInt(‘1001’,10); // ‘1001’同樣符合十進(jìn)制, 轉(zhuǎn)為十進(jìn)制整數(shù)
console.log(a); // 1001
var b = parseInt(‘234’,2); //‘234’不符合二進(jìn)制的規(guī)則
console.log(b); // NaN
var b = parseInt(‘abcde’,2); //‘abcde’不符合二進(jìn)制的規(guī)則
console.log(b); // NaN
var c = parseInt(‘1022’,2); //‘10’部分屬于二進(jìn)制,但‘22’不是,將開頭有效的部分提取并轉(zhuǎn)成十進(jìn)制
console.log(c); //2
一些特殊說明
如果以0x或0X開頭,即使不說明進(jìn)制規(guī)則,也能識別
var e = parrseInt(‘0xa’); //0x是十六進(jìn)制的表示方法,a是十六進(jìn)制中的10,轉(zhuǎn)換成整數(shù)后自動切換為十進(jìn)制
console.log(e); //10
盡量不使用出現(xiàn)e的數(shù)字,由于只能識別開頭部分,會造成結(jié)果混亂
此時(shí)應(yīng)使用parseFloat方法替代
parseInt("6.022e23", 10); // 返回 6
parseInt(6.022e2, 10); // 返回 602
非常大或非常小的數(shù)字
parseInt(4.7 * 1e22, 10); // 非常大的數(shù)值變成 4
parseInt(0.00000000000434, 10); // 非常小的數(shù)值變成 4
在最新的ES5規(guī)范中,以0開頭的數(shù)字,已經(jīng)不能再被識別為八進(jìn)制了。
parseInt("011"); //會當(dāng)成10進(jìn)制轉(zhuǎn)換為 11
parseInt("011", 8) //指定了8進(jìn)制,結(jié)果為 9
總結(jié):以上測試均來自最新版的chrome瀏覽器,并不能確保所有瀏覽器行為一致。為了保證開發(fā)中不出現(xiàn)意外,建議使用parseInt方法時(shí),一律帶上第二個(gè)參數(shù)!