相信大家都知道parseInt()是做什麼的,這裡就不啰嗦了。
以前用parseInt()從來都是parseInt(arg) , 記得在某本javascript書上看過,他還可以有第二個參數,不過從來沒有用過,直到今天,
我看到兩行代碼:
parseInt("08"); //0
parseInt("08", 10); //8
發現,不理解為什麼,於是花了一個小時細細的研究了下,原來parseInt是介樣滴~
當然這裡分為兩種情況:
一.parseInt(arg)------只帶一個參數,第二個參數省略情況
(1) parseInt('12')------此時省略第二個參數時,默認表示十進制,故'12'表示為十進制的
(2) parseInt('012')------'此處雖省略第二個參數,但是'012'是以'0'開頭,所以默認為8進制
(3) parseInt('0x12')------'此處雖省略第二個參數,但是'012'是以'0x'開頭,所以默認為16進制
二. parseInt(arg1, arg2)------arg1是要操作的數 , arg2是說明arg1是多少進制的數
(1) parseInt('12', 8)-----表示這裡'12'是8進制的
(2) parseInt('78',10)-----表示這裡'78'是10進制的
(3) parseInt('012',10)-----這裡雖說'012'是以開頭滴,默認是8進制的,但是第二個參數又強制告訴計算機'012'是一個10進制的數
好啦,知道以上的知識點後,我們再看下面的例子:
1. alert(parseInt('12', 8)); //10
解:將8進制的'12'轉換為十進制 :1*8(8的1次冪) + 2*(8的0次冪) = 10;
2. alert(parseInt('012')); //10
解:這裡'012'是以'0'開頭,所以是8進制的,那8進制的'012'轉換為十進制,都同上了,但是這裡可能有人覺得,同時它也省略了第二個參數,為什麼不是十進制的'012',這裡其實我也不知道了,程序測試結果為10,我猜想可能是檢測到以'0'開頭表示8進制比省略第二個參數默認為10進制的先級高吧,歡迎知道的大俠指點
3. alert(parseInt('012', 8)); // 10
解:次中情況應該很好理解,本身'012'默認就是8進制的,後續第二個參數又強調為8進制
4. alert(parseInt('012', 10)); // 12
解:此種情況'012'默認是8進制,但是第二個參數強制告訴計算機第一個數其實是10進制,所以將'012'當10進制處理結果12
5. alert(parseInt('78',8)); //7
解:表示將8進制的'78'計算parseInt,因為8進制中不可能出現8,所以直接截取第一個數字7進行運算,7*8(8的0次冪)=7
6. alert(parseInt('08',8)); //0
解:這裡同第5點
7. alert(parseInt('08',10)); //9
解:這裡雖是'08'默認是8進制,但是第二個參數強制為了10進制,所以結果9
8. alert(parseInt('08')); //0
解:這裡8進制的'08'只截取'0'操作
9. alert(parseInt('8',8)); //NAN
解:因為8進制中不可能出現8,所以直接NAN
10. alert(parseInt('0x12')); //18
解:這裡'0x12'是以'0x'開頭,所以默認是16進制,16進制的'12'轉換為10進制為18
好啦,這就是我的理解,有什麼用詞不准確的地方,歡迎拍磚,輕點兒哦