摘要:也給當(dāng)初出入迷宮的我不小考驗(yàn),一道題目可以引發(fā)許多思考,今天寫下的只是今時(shí)今日的想法,到未來也許還有別樣的看法。對(duì)于回調(diào)函數(shù),可以對(duì)其傳入三個(gè)參數(shù)分別是當(dāng)前元素,元素索引,調(diào)用的數(shù)組。
["1","2","3"].map(parseInt)
這道JS題目,相信大家并不會(huì)陌生。也給當(dāng)初出入JS迷宮的我不小考驗(yàn),一道題目可以引發(fā)許多思考,今天寫下的只是今時(shí)今日的想法,到未來也許還有別樣的看法。
parseInt得到正確答案,我們先來看看parseInt這個(gè)函數(shù)
名稱:parseInt
功能:將字符串轉(zhuǎn)化為數(shù)字
函數(shù)可以接受兩個(gè)參數(shù),一般來說第一個(gè)參數(shù)是字符串,第二個(gè)參數(shù)是該字符串采用的進(jìn)制數(shù)(接受2-36)。
如果不傳參數(shù)?parseInt() //NaN傳入一個(gè)參數(shù)
這個(gè)時(shí)候會(huì)默認(rèn)將字符串為十進(jìn)制進(jìn)行解析
parseInt("1111") //1111
不是所有字符串都可以正確解析的,遇到非數(shù)字的字符串會(huì)解析為NaN
parseInt("Yoda") //NaN
還要說明的一點(diǎn)是,字符串的解析從首位開始,如果是數(shù)字就繼續(xù)直到解析到非數(shù)字項(xiàng)
parseInt("2233Yoda") //2233做一些奇怪的事
但是如果傳入的不是字符串?
來看下栗子?
parseInt(2233) //2233
如果是數(shù)字轉(zhuǎn)換為相應(yīng)字符串
parseInt(null) //NaN
parseInt(undefined) //NaN
parseInt(false) //NaN
parseInt(true) //NaN
布爾值,undefined,null一律返回NaN,其實(shí)NaN也返回NaN
parseInt(NaN) //NaN第二參數(shù)是第一個(gè)參數(shù)字符串采用的進(jìn)制數(shù)
parseInt("F", 16); parseInt("17", 8); parseInt("15", 10); parseInt(15.99, 10); parseInt("FXX123", 16); parseInt("1111", 2); parseInt("15*3", 10); parseInt("12", 13);
以上都返回15。
關(guān)于第二參數(shù)有幾點(diǎn)點(diǎn)需要說一下。
1.第二參數(shù)取值范圍是2-36,如果超出范圍會(huì)返回NaN;
parseInt("2233",37) //NaN
如果傳入0,則忽略,和不傳效果一樣
parseInt("2233",0) //2233
2.如果字符串超出進(jìn)制的顯示范圍也會(huì)返回NaN;
parseInt("2233",2) //NaN
3.如果傳入值不是number類型,會(huì)出現(xiàn)一些奇怪的事
parseInt("11","2") //3 字符串被轉(zhuǎn)換成數(shù)字 parseInt("2233",false) //2233 布爾型被轉(zhuǎn)換成數(shù)字 parseInt("2233",037) //61600 看到這個(gè)我有點(diǎn)方 parseInt("2233",true+true+true+true) //175 看到這個(gè)我更方 var arr = [1,2,3] parseInt("2233",arr) parseInt("2233","Yoda") //2233
第二參數(shù)支持基本類型加減轉(zhuǎn)換,還支持字符串或其它位進(jìn)制值,如果解析不成數(shù)字該參數(shù)會(huì)被忽略。
map函數(shù)map函數(shù)是數(shù)組迭代操作中一個(gè)常用的方法,可以按照特定的函數(shù)來處理數(shù)組,返回值是新的數(shù)組,原數(shù)組不會(huì)改變:
var arr = [1,2,3] var newArr = a.map(function(para1){return a+2}); console.log(arr) // [1,2,3] console.log(newArr) //[3,4,5]
這里要清楚map可以傳入兩個(gè)參數(shù),第一個(gè)是一個(gè)回調(diào)函數(shù),第二個(gè)是this(篇幅有限這里就不展開這塊了)。對(duì)于回調(diào)函數(shù),map可以對(duì)其傳入三個(gè)參數(shù)分別是當(dāng)前元素,元素索引,調(diào)用map的數(shù)組。
是不是有點(diǎn)暈?!讓我們 擼一擼 啊呸! 捋一捋:
map函數(shù)接受一個(gè)回調(diào)函數(shù)callback
callback可以傳入三個(gè)參數(shù)(前元素,元素索引,調(diào)用map的數(shù)組)
結(jié)合前面說的parseInt,parseInt可以傳入兩個(gè)參數(shù)(字符串,進(jìn)制數(shù))
是不是有一種豁然開朗的趕腳?為什么返回值是[1,NaN,NaN]?
對(duì)于數(shù)組["1","2","3"],執(zhí)行["1","2","3"].map(parseInt)時(shí),對(duì)于第一個(gè)元素"1"她的index為0:
parseInt("1",0) // 1
第二參數(shù)會(huì)直接被忽略從而得到結(jié)果,對(duì)于第二個(gè)元素"2"她的index為1:
parseInt("2",1) // NaN
翻看前問即可知道,結(jié)果;
同樣對(duì)于第三個(gè)參數(shù)"3",由于二進(jìn)制值任何一位不可能有3,所以結(jié)果也是NaN
parseInt("3",2) // NaN
Ps:查閱了網(wǎng)上的許多資料,也看了不少書,加了一些自己的思考這道題就解到這里,如果錯(cuò)誤還請(qǐng)指正。
PPs:這題中參數(shù)index就是所傳入元素的index,可以傳入index的還有數(shù)組的另一個(gè)方法reduce,形如:
array.reduce(function(preValue,currentValue,index,array){ return //.... })
這里既然可以傳入兩個(gè)值,那么index究竟是誰的index?這個(gè)就留到下回繼續(xù)討論。
本文的github地址
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/79999.html
摘要:因?yàn)榧臃ǖ膬?yōu)先級(jí)比條件運(yùn)算符高,所以先運(yùn)算加號(hào),是字符串拼接,結(jié)果是非空字符串,在中字符串的布爾類型為。知識(shí)點(diǎn)三目運(yùn)算為真執(zhí)行為假執(zhí)行運(yùn)算優(yōu)先級(jí)在中布爾類型只有以下種情況為假,其他都為真。 一、測(cè)試題 原題:以下代碼的輸出是? var val = false; alert(val is + val ? true : false); 解析: 1. 此題考察的知識(shí)點(diǎn): 三目運(yùn)算、**運(yùn)...
摘要:如果你要問他和誰當(dāng)進(jìn)去的快,要從下面兩個(gè)方面考慮結(jié)束時(shí)。至于什么,查了很多的資料,了解到一個(gè)瀏覽器環(huán)境只能有一個(gè)事件循環(huán),而一個(gè)事件循環(huán)可以有多個(gè)任務(wù)隊(duì)列。 ====據(jù)說這是今日頭條去年的一道筆試題,主要考察的是setTimeout async promise執(zhí)行順序 ~先雙手奉上這道題目~ async function async1() { consol...
摘要:前兩天做了一份筆試題按照?qǐng)?zhí)行順序列出下面代碼的打印內(nèi)容可能有些小朋友會(huì)被里面那個(gè)立即執(zhí)行函數(shù)嚇傻。和將指向改變至,也就是了。 前兩天做了一份筆試題:按照?qǐng)?zhí)行順序列出下面代碼的打印內(nèi)容 var name = The Window; var object = { name : The Object, getNameFunc : function(){ (()...
摘要:注意點(diǎn)這個(gè)代碼是嚴(yán)格依賴環(huán)境的,例如中和是連續(xù)的,在編譯器中,和之間有一個(gè)空間。注意點(diǎn)當(dāng)把與交換之后,程序?qū)⒉粫?huì)出現(xiàn)死循環(huán),但是程序的越界訪問報(bào)錯(cuò)是少不了的。注意點(diǎn)這種優(yōu)化是無差別的,即無論你的代碼是否越界,都會(huì)進(jìn)行這樣的優(yōu)化。 目錄 聲明 原題 題目詳細(xì)解析 運(yùn)行結(jié)果: 題目...
摘要:對(duì)象是一個(gè)返回值的代理,這個(gè)返回值在對(duì)象創(chuàng)建時(shí)未必已知。這使得異步方法可以像同步方法那樣返回值異步方法會(huì)返回一個(gè)包含了原返回值的對(duì)象來替代原返回值。 前言 近來參加校招筆試,發(fā)現(xiàn)有好幾道關(guān)于Promise的題目。然而我都沒有了解過。所以,這篇文章以網(wǎng)易筆試的一道題開始,記錄關(guān)于Promise的那些事。文章地址:http://lsxj615.com/2016/08/04... 筆試題 c...
閱讀 696·2021-11-22 09:34
閱讀 3830·2021-09-22 15:42
閱讀 1342·2021-09-03 10:28
閱讀 1079·2021-08-26 14:13
閱讀 1911·2019-08-29 15:41
閱讀 1436·2019-08-29 14:12
閱讀 3374·2019-08-26 18:36
閱讀 3316·2019-08-26 13:47