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