摘要:問題把一個的數組轉換成很自然的,我們會這么寫但這卻得不到我們想要的結果,會變成但如果我們給這個函數包一下,得到的卻是正確的結果。所以,第一種寫法結果是符合的預期的,雖然他不符合我們的預期。
問題:
把一個["1", "2", "3"]的數組轉換成[1,2,3]
很自然的, 我們會這么寫:
["1","2", "3"].map(parseInt);
但這卻得不到我們想要的結果, 會變成
[1, NaN, NaN]
但如果我們給parseInt這個函數包一下,
["1","2", "3"].map(function(n){ return parseInt(n)});
得到的卻是正確的結果。
下面就是要講一下為什么?
事實上, 第一種寫法, 放了2個錯誤:
在js中, map實際上調用的函數是一個多參數函數, 即function(value, index, array), 更詳細的說明是MDN的說明:
> callback is invoked with three arguments: the value of the element, the index of the element, and the Array object being traversed.
也就是說, 第一種寫法實際上是這樣的:
["1","2","3"].map(function(value,index,array){ return parseInt(value, index, arrary); });
然后這里涉及到第二個錯誤了。
parseInt也是一個多參數函數;具體定義是parseInt(string, radix);, radix就是進制, MSD還強調Always specify this parameter to eliminate reader confusion and to guarantee predictable behavior.
根據上面展開的函數, 在對"1"執行的是parseInt("1", 0);, 這里要注意, js中會把多余的參數給忽略了~
但radix參數是零的時候, 他會根據第一個string來做判斷, 這里是當十進制了。 所以執行成功。
接下的"2"肯定就錯啦, radix不能是1進制。
那 parseInt("3", 2);為什么錯, 不是有2進制么? 你見過2進制中有3的么。。。
所以, 第一種寫法結果是符合js的預期的, 雖然他不符合我們的預期。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78126.html
摘要:剛進公司實習不久,最近公司有一個需求做一個的頁面,利用傳過來的參數來顯示不同的表單內容,不同的表單提交的內容也就不一樣。 剛進公司實習不久,最近公司有一個需求,做一個h5的頁面,利用傳過來的url參數來顯示不同的表單內容,不同的表單提交的內容也就不一樣。 雖然我剛拿到也覺得so easy,但是就是這個簡單的東西也踩了很多坑,記錄下來,不再懵逼。 1 隱藏的表單元素的value也會被默認...
摘要:最近開發中遇到的一個主從延遲的坑,記錄并總結,避免再次犯同樣的錯誤。運行時查詢為空,執行完畢后查詢時內容存在,初步懷疑是主從延遲問題。報錯只是部分失敗,確定是主從延遲的問題。接下來,會去學習主從復制的原理,敬請期待。 最近開發中遇到的一個MySQL主從延遲的坑,記錄并總結,避免再次犯同樣的錯誤。 情景 一個活動信息需要審批,審批之后才能生效。因為之后活動要編輯,編輯后也可能觸發審批,審...
摘要:首發公眾號程序員日記作者賢榆的榆如果你覺得有幫助歡迎關注贊賞轉發閱讀時間字分鐘注先簡述一下時間線月日周日上午拿到新的下午裝好系統晚上從舊的上遷移數據到新。到月號還沒有修復,官方也還沒有任何關于這方面的恢復。 showImg(https://segmentfault.com/img/remote/1460000016418427?w=690&h=365); 首發公眾號:Android程序...
閱讀 3024·2021-09-22 14:59
閱讀 1864·2021-09-22 10:02
閱讀 2108·2021-09-04 16:48
閱讀 2260·2019-08-30 15:53
閱讀 2967·2019-08-30 11:27
閱讀 3403·2019-08-29 18:35
閱讀 961·2019-08-29 17:07
閱讀 2669·2019-08-29 13:27