看完標(biāo)題,入坑過(guò)的同學(xué)腦海里很快會(huì)浮現(xiàn)出這道經(jīng)典面試題,沒(méi)碰到過(guò)的同學(xué)不妨跟著樓主先來(lái)復(fù)習(xí)一遍 parseInt 的用法(主要參考 MDN)。
parseInt 是 JavaScript 中的一個(gè)全局函數(shù)(頂級(jí)函數(shù)),它會(huì)將給定的字符串以指定基數(shù)(radix/base)解析成為整數(shù)。
它的語(yǔ)法非常簡(jiǎn)單:
復(fù)制代碼parseInt(string, radix)
第一個(gè)參數(shù) string 是要被解析的值,如果參數(shù)不是一個(gè)字符串,則將其轉(zhuǎn)換為字符串,字符串開(kāi)頭的空白符將會(huì)被忽略。而第二個(gè)參數(shù) radix 是一個(gè) 2 到 36 之間的整數(shù)值,用于指定轉(zhuǎn)換中采用的基數(shù),如果不傳入,默認(rèn)是 10,即按照十進(jìn)制轉(zhuǎn)換,這里要注意一點(diǎn),如果第二個(gè)參數(shù)傳入 0,和傳入 10 以及不傳入第二個(gè)參數(shù)等效。函數(shù)返回一個(gè)整數(shù)值,如果解析過(guò)程中發(fā)生錯(cuò)誤,將返回 NaN。
返回 NaN 的主要有以下幾種情況:
被解析參數(shù)的第一個(gè)字符無(wú)法被轉(zhuǎn)化成數(shù)值類型
被解析參數(shù)數(shù)值太大,不是 radix 進(jìn)制下的合法數(shù)字
radix 不在 [2, 36] 范圍內(nèi)(注意其實(shí) 0 也是可以的)
復(fù)制代碼console.log(parseInt('hello', 2)); // NaNconsole.log(parseInt('3', 2)); // NaN, 3 不是合法的二進(jìn)制數(shù)字console.log(parseInt('3', 100)); // NaN
其實(shí)實(shí)際開(kāi)發(fā)中我很少用 parseInt,而是用 +
和 ~~
代替,因?yàn)樗鼘?shí)在是太長(zhǎng)了,但是很顯然 parseInt 的使用范圍更廣。
簡(jiǎn)單回顧了 parseInt 的用法,我們來(lái)看這道題:
網(wǎng)友評(píng)論