国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你不知道的parseInt

DesGemini / 2905人閱讀

摘要:前言原由偶然看到一個(gè)略微奇妙的代碼初看之時(shí),瞬間得出答案雖然心底有些許疑問的聲音因此追溯根源,沒想到答案讓我驚呼這里黑人問號(hào),手動(dòng)滑稽查詢了等文檔,因此得出下文結(jié)論,由于英語(yǔ)渣渣,所以有不恰當(dāng)?shù)牡胤较M魑粠兔Ω瘮?shù)是核心的一個(gè)全局函數(shù)

前言
原由:
偶然看到一個(gè)略微奇妙的代碼["1", "2", "3"].map(parseInt)
初看之時(shí),瞬間得出答案[1, 2, 3](雖然心底有些許疑問的聲音~)
因此追溯根源,沒想到答案讓我驚呼WTF?(這里黑人問號(hào),手動(dòng)滑稽)
查詢了MDN、Standard ECMA-262等文檔,因此得出下文結(jié)論,由于英語(yǔ)渣渣,所以有不恰當(dāng)?shù)牡胤较M魑粠兔Ω齸
parseInt函數(shù)

parseIntECMAScript核心的一個(gè)全局函數(shù),可以在實(shí)現(xiàn)了ECMAScript的宿主環(huán)境全局調(diào)用

廢話不多說(shuō),下面就是探討parseInt函數(shù)的正文:
MDN查詢得知 -> parseInt(string, [int radix])
是的,parseInt函數(shù)其實(shí)有兩個(gè)形式參數(shù),正是因?yàn)槲矣浀眠@一點(diǎn)才催生了我前文提到的疑問和導(dǎo)致這篇科普文的誕生

一個(gè)形式參數(shù)

相信,很多人都使用過parseInt函數(shù)傳遞一個(gè)形式參數(shù)的時(shí)候,這很簡(jiǎn)單嘛,不就是把字符串轉(zhuǎn)換成Int32類型的整數(shù)?
沒毛病,老鐵雙擊666~

    console.log(parseInt("12"));
    console.log(parseInt("08"));
    console.log(parseInt("0x16"));
    console.log(parseInt("-12"));
    console.log(parseInt("   -12"));
    console.log(parseInt("   -  12"));
    console.log(parseInt("124ref"));
    console.log(parseInt("ref"));

以上幾乎就是parseInt函數(shù)一個(gè)形式參數(shù)時(shí)的所有情況,那么結(jié)果都是啥呢?希望大家手動(dòng)執(zhí)行下代碼:)手動(dòng)滑稽

其中,要特殊注意的就080x16   -  12

首先呢,有人看到我說(shuō)要特殊注意的第一個(gè)字符串的時(shí)候,可能心里會(huì)暗想(up主4不4傻),這么簡(jiǎn)單有需要注意的?

其實(shí)呢,我也是google了一下關(guān)于parseInt函數(shù)的中文博文(嗯,是的沒錯(cuò)(/▽\)),發(fā)現(xiàn)了一個(gè)奇怪的事情 -> 傳送門
這篇博文的up主說(shuō)parseInt("08")的結(jié)果得不到8,我默默地打開Chrome的devTool,一跑發(fā)現(xiàn)沒毛病啊!!!看了一下博文的時(shí)間是2010年,因此推斷是ECMAScript標(biāo)準(zhǔn)作祟,如果不是那我也就...(攤手~)

ox16這個(gè)特殊注意點(diǎn)呢,也很平常其實(shí),就是16進(jìn)制前綴嘛,看過Javascript權(quán)威指南的都懂,沒了解過的呢看我看我來(lái)說(shuō)FreeStyle...parseInt傳遞的第一個(gè)形式參數(shù)是字符串類型的,底層實(shí)現(xiàn)會(huì)先識(shí)別該字符串時(shí)候是否有0x或者0X前綴,如果有呢,第二個(gè)形式參數(shù)(radix)就會(huì)被賦值為16,也就是十六進(jìn)制,然后parseInt再把這個(gè)十六進(jìn)制轉(zhuǎn)換為十進(jìn)制Number類型

- 12,這個(gè)就更為簡(jiǎn)單點(diǎn)啦,就是識(shí)別有沒有負(fù)號(hào)前綴,有的話會(huì)轉(zhuǎn)換成負(fù)整數(shù)。但是有一點(diǎn)注意的是空格,空格出現(xiàn)在parseInt函數(shù)的string形參最前面和最后面都會(huì)被忽略,然而出現(xiàn)在特殊前綴(英文翻譯為code unit)0x0X-就會(huì)有問題,parseInt無(wú)法進(jìn)行轉(zhuǎn)換返回NaN

兩個(gè)形式參數(shù)

那么重頭戲來(lái)了,這篇科普文的精髓部分,不要睡著啊~老鐵

parseInt(string, [int radix])第二個(gè)形參是可以忽略的,忽略時(shí)默認(rèn)賦值為10也就是十進(jìn)制

radix就是指定第一個(gè)形參的進(jìn)制類型,然后根據(jù)這個(gè)進(jìn)制類型再轉(zhuǎn)換為十進(jìn)制整數(shù)(敲黑板~)

radix形參沒指定的時(shí)候是10,其次他是具有有效范圍滴:[2, 36]和特殊值0
下面是英語(yǔ)渣渣的我翻譯后,簡(jiǎn)化的parseInt執(zhí)行步驟:(ECMAScript原解析->傳送門)

將第一個(gè)形參轉(zhuǎn)換為字符串

識(shí)別string轉(zhuǎn)換是否有code unit,如果有 -> -標(biāo)記為負(fù)數(shù),0x0X則把radix賦值為16

radix形參(int類型)是否存在,存在則重新賦值(會(huì)對(duì)實(shí)參進(jìn)行Int32轉(zhuǎn)化,無(wú)法轉(zhuǎn)換成int類型則不會(huì)重新賦值radix)

radix為0,則設(shè)置radix為默認(rèn)值10

如果radix為1,或者大于等于37,parseInt直接返回NaN

如果radix為[2, 36]時(shí)則代表,string參數(shù)分別是二進(jìn)制,三進(jìn)制(如果有得話~)...三十六進(jìn)制類型

然后對(duì)string進(jìn)行的radix進(jìn)制 -> 十進(jìn)制轉(zhuǎn)換

以上就是parseInt轉(zhuǎn)換時(shí)的步驟,那么我們來(lái)開始解釋["1", "2", "3"].map(parseInt)
at first, 答案是[1, NaN, NaN]

    (function (){
        var ret = ["1", "2", "3"].map((value, index)=>{
            console.log(value, index);
            return parseInt(value, index);
        });
        console.log(ret);
    })();

這是["1", "2", "3"].map(parseInt)內(nèi)部執(zhí)行的剖析,valueindex相信大家都懂,不懂請(qǐng)自行MDN,執(zhí)行步驟為:
value="1",index=0 -> parseInt(value, index)
value="2",index=1 -> parseInt(value, index)
value="3",index=2 -> parseInt(value, index)
抽離出來(lái),其實(shí)就是

    parseInt("1", 0);
    parseInt("2", 1);
    parseInt("3", 2);

按照我前面分析的parseInt轉(zhuǎn)換步驟,可以很輕易的得出前面兩個(gè)的答案,那么第三個(gè)呢?手動(dòng)滑稽、黑人問號(hào)...哈哈
其實(shí),也很簡(jiǎn)單啦,parseInt("3", 2)這是根據(jù)二進(jìn)制對(duì)字符串3進(jìn)行十進(jìn)制轉(zhuǎn)換對(duì)吧!!!
exm???有毛病?沒毛病,老鐵,就是......你家二進(jìn)制有3?二進(jìn)制不就是01
就是01
01
01
1
1

因此返回NaN,666

佐證如下:

parseInt("13", 2),這個(gè)結(jié)果是......1,因?yàn)閟tring參數(shù)如果最開始的code符合radix進(jìn)制的話是可以進(jìn)行解析轉(zhuǎn)換的,正如這里"1"是符合二進(jìn)制的,"3"是不符合二進(jìn)制的,但1處于優(yōu)先位置,所以可以進(jìn)行轉(zhuǎn)換解析,而3被無(wú)情地忽略~

Lastly,我們來(lái)動(dòng)手一下吧:)
    parseInt("9", 8);
    parseInt("0x16", 10);
    parseInt("-10", 16);
    parseInt("5/8/2017", "javascript is such funny");
后記
這只是一篇科普文,大家relaxed一下,畢竟世界竟如此好玩~最后不喜勿噴,歡迎大家指出不足和錯(cuò)誤的地方,感謝閱讀
參考文獻(xiàn)

MDN

Standard ECMA-262

圖解進(jìn)制轉(zhuǎn)換

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/84680.html

相關(guān)文章

  • 你不知道取數(shù)值整數(shù)部分冷知識(shí)

    摘要:我們可以用測(cè)一下具體實(shí)現(xiàn)原理,請(qǐng)參考文檔注意因?yàn)椴僮鲗⒉僮鲾?shù)轉(zhuǎn)為,所以它不能處理超過位的數(shù)值取整,而有效整數(shù)的范圍是位。綜上所以如果要考慮壓縮代碼的大小,且明確知道數(shù)值范圍不會(huì)超過位整數(shù)的時(shí)候,可以考慮使用取整。 在處理數(shù)值的時(shí)候,獲取浮點(diǎn)數(shù)的整數(shù)和小數(shù)部分,是一種常見的操作,在JavaScript中有許多方法可以達(dá)到目的,但也正因?yàn)榉椒ū姸啵阅姆N方法更好,也值得我們仔細(xì)研究一番。...

    calx 評(píng)論0 收藏0
  • JavaScript字符串轉(zhuǎn)數(shù)字5種方法及其陷阱

    摘要:例如注意字符串中的負(fù)十六進(jìn)制數(shù)字是一個(gè)特殊情況,如果你用解析,結(jié)果是不正確的。轉(zhuǎn)換十六進(jìn)制數(shù)時(shí)要小心,如果你不知道要轉(zhuǎn)換對(duì)象的類型,不要使用。字符串轉(zhuǎn)換為數(shù)字的方式總結(jié)負(fù)十六進(jìn)制數(shù)字符串轉(zhuǎn)換為數(shù)字時(shí)。 摘要 :JavaScript 是一個(gè)神奇的語(yǔ)言,字符串轉(zhuǎn)數(shù)字有 5 種方法,各有各的坑法! 原文: Converting Strings to Number in Javascript...

    shengguo 評(píng)論0 收藏0
  • JS字符串轉(zhuǎn)數(shù)字方法總結(jié)

    摘要:字符串中的負(fù)十六進(jìn)制數(shù)字是一個(gè)特殊情況,如果你用解析,結(jié)果是不正確的。按位非可以把字符串轉(zhuǎn)換成整數(shù),但他不是浮點(diǎn)數(shù)。如果是一個(gè)字符串轉(zhuǎn)換,它將返回這是什么原理通過翻轉(zhuǎn)每個(gè)位,也稱為數(shù)字的補(bǔ)碼。 String轉(zhuǎn)換為Number有很多種方式,我可以想到的有5種!但總有一些情況讓人猝不及防,總結(jié)到這里供自己日后查找方便 parseInt 根據(jù)JsPerf.com的基準(zhǔn)測(cè)試,大多數(shù)瀏覽器對(duì)pa...

    call_me_R 評(píng)論0 收藏0
  • Javascript基礎(chǔ)之-強(qiáng)制類型轉(zhuǎn)換(一)

    摘要:轉(zhuǎn)換為字符串規(guī)則如下圖代碼大致就是普通其他基本類型轉(zhuǎn)為字符串的話,就直接轉(zhuǎn)為其值的字符串表達(dá)形式,如果是基本類型的封裝對(duì)象,會(huì)先拆封,然后再轉(zhuǎn)為字符串,如果是普通對(duì)象,則會(huì)調(diào)用其內(nèi)部的值,如果是極大數(shù)和級(jí)小數(shù),將會(huì)進(jìn)行一些轉(zhuǎn)化,具體規(guī) 轉(zhuǎn)換為字符串規(guī)則如下圖代碼: console.log(String(undefined)); // undefined console.log(Str...

    leon 評(píng)論0 收藏0
  • 前端資源系列(5)-JavaScript奇味探索

    摘要:中有很多奇妙的東西,歸咎歸功于設(shè)計(jì)時(shí)候的迅速。缺陷有,但是的強(qiáng)大確實(shí)體現(xiàn)的淋漓盡致。它是如此的靈活,當(dāng)然隨之而來(lái)的便是開發(fā)的代價(jià),它不像強(qiáng)類型語(yǔ)言那樣規(guī)規(guī)矩矩。難得周末晚上清閑,回味這些看起來(lái)有點(diǎn)怪怪卻又在發(fā)生著的問題。 JavaScript中有很多奇妙的東西,歸咎or歸功于設(shè)計(jì)時(shí)候的迅速。缺陷有,但是JavaScript的強(qiáng)大確實(shí)體現(xiàn)的淋漓盡致。 它是如此的靈活,當(dāng)然隨之而來(lái)的便是開...

    kyanag 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<