例題: [1,2,3].map(parseInt)
先看看 map 和 parseInt 用法
Array.prototype.map()
語法
array.map(callback[, thisArg])
callback函數(shù)的執(zhí)行規(guī)則
參數(shù):自動(dòng)傳入三個(gè)參數(shù)
currentValue(當(dāng)前被傳遞的元素)惊畏;
index(當(dāng)前被傳遞的元素的索引)姿骏;
array(調(diào)用map方法的數(shù)組)
返回值:對(duì)每個(gè)傳入callback的數(shù)組元素進(jìn)行處理后,返回的值組成一個(gè)新的數(shù)組。
callback處理的數(shù)組范圍:
只處理有值的索引音念。沒有被賦值希痴、被delete刪除的索引不會(huì)被處理。
在處理過程中新增的元素不會(huì)被callback處理怜姿。
在處理過程中被刪除的元素不會(huì)被callback處理慎冤。
在處理過程中被改變的元素,會(huì)以callback執(zhí)行到該元素時(shí)的值被處理沧卢。
tips:綜合2-4條:在callback第一次調(diào)用前蚁堤,已經(jīng)確定了被處理數(shù)組的最大范圍。
thisArg
callback函數(shù)被調(diào)用時(shí)但狭,this會(huì)指向thisArg參數(shù)所傳的對(duì)象披诗;
不向thisArg傳值、或傳的值為null/undefined時(shí)立磁,this指向全局對(duì)象呈队。
副作用
map方法對(duì)原數(shù)組不產(chǎn)生影響,(除非callback執(zhí)行時(shí)改變了原數(shù)組)唱歧。
parseInt()
語法
parseInt(string, radix)
參數(shù)string
要被解析的值宪摧。
該參數(shù)可以不是字符串。如果不是字符串颅崩,會(huì)將其轉(zhuǎn)換為字符串
字符串開頭的可以有空白几于,空白會(huì)被忽略
參數(shù)radix
轉(zhuǎn)換所采用的基數(shù),2到36之間沿后。
解析規(guī)則
string參數(shù)被看做radix指定進(jìn)制下的數(shù)要把它轉(zhuǎn)換成十進(jìn)制的整數(shù)沿彭。
沒有指定基數(shù)/基數(shù)為0時(shí):
參數(shù)string以“0x”或“0X”開頭,radix取16得运;
參數(shù)string以“0”開頭膝蜈,ECMAScript5規(guī)定radix只能取10,然而ECMAScript3允許radix取8熔掺。具體的解析結(jié)果依然由實(shí)現(xiàn)環(huán)境而定饱搏。
其他情況下,radix取10.
基數(shù)為1或大于36時(shí):解析結(jié)果為NaN置逻。
基數(shù)處于2到36之間時(shí):如果string參數(shù)的第一個(gè)字符(除空白以外)推沸,不屬于radix指定進(jìn)制下的字符,解析結(jié)果為NaN;如果第一個(gè)字符屬于radix指定進(jìn)制下的字符鬓催,則解析到不屬于radix指定進(jìn)制下的字符時(shí)肺素,將忽略該字符及其后的所有字符。
題目分析
理解了所有背景知識(shí)以后宇驾,讓我們?cè)賮砜匆幌逻@道題:
["1"倍靡, "2", "3"].map(parseInt)
考察的知識(shí)點(diǎn)為:
1. callback函數(shù)自動(dòng)傳入三個(gè)參數(shù):currentValue课舍;index塌西;array。
map方法的callback函數(shù)——parseInt方法筝尾,在沒有指定傳入的參數(shù)的情況下捡需,將自動(dòng)接收三個(gè)參數(shù)。在遍歷過程中筹淫,parseInt的調(diào)用情況如下:
parseInt("1", 0, ["1", "2", "3"])
parseInt("2", 1, ["1", "2", "3"])
parseInt("3", 2, ["1", "2", "3"])
2. parseInt方法接收兩個(gè)參數(shù)站辉。
第三個(gè)參數(shù)["1", "2", "3"]將被忽略。parseInt方法將會(huì)通過以下方式被調(diào)用
parseInt("1", 0)
parseInt("2", 1)
parseInt("3", 2)
3. parseInt的第二個(gè)參數(shù)radix為0時(shí)损姜,ECMAScript5將string作為十進(jìn)制數(shù)字的字符串解析饰剥;
parseInt的第二個(gè)參數(shù)radix為1時(shí),解析結(jié)果為NaN薛匪;
parseInt的第二個(gè)參數(shù)radix在2—36之間時(shí)捐川,如果string參數(shù)的第一個(gè)字符(除空白以外),不屬于radix指定進(jìn)制下的字符逸尖,解析結(jié)果為NaN。
parseInt("3", 2)執(zhí)行時(shí)瘸右,由于"3"不屬于二進(jìn)制字符娇跟,解析結(jié)果為NaN。
綜上太颤,["1", "2", "3"].map(parse)的返回結(jié)果為[1, NaN, NaN]苞俘。