["1", "2", "3"].map(parseInt) 答案是多少?數組
考察點:1 . ES5的map方法,接收參數而且callback計算而且返回重組。函數
2 . 這種寫法是個什麼概念呢,其實就是["1", "2", "3"].map(parseInt(elem,index,thisArr))this
3 . parseInt的參數。spa
咱們一個一個考點說。3d
1 . ES5的數組操做方法map,用來把每個根據數組參數通過回掉callback返回一個新數組,callback能夠接收三個參數,elem表示數組的元素,index,下表,thisArr,所在的數組。code
例如blog
[ 1 , 2 , 3 ].map(function(elem,index,thisArr){ return elem*index })
就會得出[ 0 , 2 , 6 ],即每個數組中的元素乘以他的下標。字符串
2 . ["1", "2", "3"].map(parseInt) 會怎麼樣呢string
parseInt會取整,返回一個整數,字符串變成數字再取整。可是沒有括號是什麼鬼。沒有括號,會發生的就是把能傳的參數全傳進去。大不了傳的多了反正不影響,就會發生三次取整。it
分別是parseInt("1",0,["1", "2", "3"]),
parseInt("2",1,["1", "2", "3"])
parseInt("3",2,["1", "2", "3"])
而後返回值重組爲一個數組。
3 . parseInt的參數。
不多有人知道喪心病狂的parseInt它很差好取整,還有其餘的參數,沒錯,它有倆個參數,因此上述的第三個參數是用不到的。
parseInt(string, radix)
多說無益,看看W3C說的,他又是啥子意思捏。以多少來解析,就是多少進制,就是說parseInt("2",4)就是把2用4進制的方式解析成10進制的數字。
意思就是parseInt("1",0) 他會由於radix是0,會解析出來爲 1 。
console.log(parseInt(10,2)) //2 以二進制
console.log(parseInt(101,2)) //5 以二進制
console.log(parseInt(101,3)) //10 以三進制
console.log(parseInt(401,36)) //40*36的平方+0*36+1*36的0次方
臥槽?我聽過2 4 8 16 還沒聽過 3 , 36 ,是的,不光有這兩貨,js的parseInt能夠解析成2-36的全部進制,原理其實都同樣。
那麼因此parseInt( "1" , 0 )是 1 ,parseInt( "2" , 1 ) 是 NaN由於沒有1進制(本身思考1進制怎麼玩,這個問題很強大),parseInt( "3" , 2 ) 這個怎麼搞,3*2的0次方麼 。 應該是 1 啊。
可是一個2進制的數字,他會出現3麼,二進制固然全是01010101了。因此3實際上是沒有辦法解析的 。 也是NaN 。由於3不是2進制的數字,沒辦法解析成10進制
那麼這個題的答案就通了 爲 [ 1 , NaN , NaN ] 。
反思:咱們能夠學到什麼呢?
1 . 偉大的ES5數組操做方法還有不少,都挺不錯,反正之前我都手寫過,當時好難受。
2 . ["1", "2", "3"].map(parseInt) 這個沒有參數的調用函數方法有沒有比較炫酷呢,簡單威武,自動傳參,可是也有本身的缺點,有時候雜就不想讓他傳呢
3 . parseInt用法其實很厲害的,能夠試試把顏色16進制轉換成rgba那種的。
下面的是用上面的知識寫的16進制顏色轉化rgb
var a = "#ffaacc"; function colorToRGB(color){ var color = color.split("#")[1] var colorArr = [] ; for(var i = 0 ; i<color.length ; i=i+2){ colorArr[i/2] = [ color[i] , color[i+1] ].join("") } return colorArr.map(function(elem){ return parseInt(elem,16) }).toString() } console.log(colorToRGB(a))