Number與parseInt都是JS數(shù)值轉(zhuǎn)換的函數(shù)。
- 首先從語義上來辨別兩者的區(qū)別(這也是我記各種函數(shù)等內(nèi)容的區(qū)別方法)。
Number() ,從翻譯中看語義,number就是數(shù)字的之意。
它意味著無論給Number()傳入任何參數(shù),它可以把內(nèi)容轉(zhuǎn)換為數(shù)字
parseInt(),在英語上,`分析詞句`之意,而 Int 則是我們定義變量時的整數(shù)類型。
顯而易見,則是通過分析把詞句轉(zhuǎn)換為整型。
而在JS中,我們詞句的數(shù)據(jù)類型,就是我們常見的`string`字符串
因此,parseInt()就是把字符串轉(zhuǎn)換為整型之意
測試樣例:
/*******************************Number********************************/
Number("123") //123 字符串
Number("") //0 字符串
Number(true) //1 布爾
Number(null) //0 對象
Number(1.1) //1.1 浮點數(shù)
/*******************************parseInt********************************/
parseInt("123") //123 字符串
parseInt(""); //NaN 字符串
parseInt(true) //NaN Boolean
parseInt(null) //NaN 對象
parseInt(1.1) //1 浮點數(shù)
- 在進行數(shù)值轉(zhuǎn)換的過程中
(1)Number有較為復(fù)雜的轉(zhuǎn)換規(guī)則
如果是boolean值,true和false將分別轉(zhuǎn)換為十進制數(shù)值
如果是數(shù)字值,只是簡單的傳入與返回
如果是null, 返回0
如果是undefined ,返回NaN
如果是字符串,遵循下列原則:
1.只包含數(shù)字,八進制的數(shù)值將會被忽略前面的0,直接顯示為十進制 如:“011” 應(yīng)為 ‘9’但只能轉(zhuǎn)換為‘11’;
2.浮點數(shù)可以轉(zhuǎn)換為對應(yīng)的浮點數(shù)值
3.如果是十六進制會轉(zhuǎn)換為十進制值
4.如果字符串為空轉(zhuǎn)換為0
5.其他轉(zhuǎn)為NaN
(2) parseInt()在轉(zhuǎn)換字符是更看其是否符合數(shù)值模式。它會忽略字符串前面的空格,知道找到第一個非空格字符。它是逐個解析字符的
e.g:parseInt("1234aaa")輸出為“1234” 如果第一個字符是數(shù)字字符,會繼續(xù)解析第二個字符,直到解析完所有的后續(xù)字符或者遇到了一個非數(shù)字字符。
parseInt()同樣不具有解析八進制的能力,所以可以給parseInt()加入第二個參數(shù)
e.g:parseInt("AF",16); //175 后面還可以為2,8,10,16,默認情況下為10