亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS 中為啥 ['1', '7', '11

yuanzhanghu / 633人閱讀

摘要:如果我們把非布爾值作為條件呢打開控制臺(tái)并運(yùn)行上述代碼,會(huì)打印說明條件為真值。在中,真值指的是在布爾值上下文中轉(zhuǎn)換后的值為真的值。兩個(gè)能夠建立元素間一一對(duì)應(yīng)的集合稱為互相對(duì)等集合。

為了保證可讀性,本文采用音譯而非直譯。

Javascript 一直是神奇的語言。 不相信我? 嘗試使用mapparseInt將字符串?dāng)?shù)組轉(zhuǎn)換為整數(shù)。打開 Chrome 的控制臺(tái)(F12),粘貼以下內(nèi)容,然后按回車,查看輸出結(jié)果:

["1", "7", "11"].map(parseInt);

我們得到的不是一個(gè)整數(shù)數(shù)組[1,7,11],而是[1,NAN, 3],要了解究竟發(fā)生了什么,我們首先要討論一些Javascript概念。

想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你!

真值(truthy) & 虛值(falsy)

以下是 JS 中一個(gè)簡(jiǎn)單的if-else語句:

if (true) {
    // this always runs
} else {
    // this never runs
}

在上例中,if 條件為 true,因此總是執(zhí)行if塊,忽略else塊。這是一個(gè)簡(jiǎn)單的例子,因?yàn)?b>true是一個(gè)布爾值。如果我們把非布爾值作為條件呢 ?

if ("hello world") {
    console.log("Condition is truthy");
} else {
    console.log("Condition is falsy");
}  

打開控制臺(tái)并運(yùn)行上述代碼,會(huì)打印 Condition is truthy,說明條件 "hello world"真(true)值。

在 JavaScript 中,Truthy (真值)指的是在 布爾值 上下文中轉(zhuǎn)換后的值為真的值。所有值都是真值,除非它們被定義為 falsy (即除了 false,0,""null,undefinedNaN 外)。

falsy(虛值)是在 Boolean 上下文中已認(rèn)定可轉(zhuǎn)換為‘假‘的值。

JS中的對(duì)象不是真值就是虛值。

令人困惑的是,這意味著字符串“false”,字符串“0”,空對(duì)象{}和空數(shù)組[]都是真的。 使用使用 Boolean 方法來驗(yàn)證,如 Boolean("0")。

出于我們的目的,接下來只要記住0是假的就行了。

基數(shù)

在數(shù)學(xué)上,基數(shù)(cardinal number)是集合論中刻畫任意集合大小的一個(gè)概念。兩個(gè)能夠建立元素間一一對(duì)應(yīng)的集合稱為互相對(duì)等集合。例如3個(gè)人的集合和3匹馬的集合可以建立一一對(duì)應(yīng),是兩個(gè)對(duì)等的集合。

0 1 2 3 4 5 6 7 8 9 10

當(dāng)我們從0數(shù)到9時(shí),每個(gè)數(shù)字(0-9)都有不同的符號(hào),但是當(dāng)我們數(shù)到10時(shí),我們需要兩個(gè)不同的符號(hào)(10)來表示這個(gè)數(shù)字。這是因?yàn)槲覀兊氖M(jìn)制計(jì)數(shù)系統(tǒng)的基數(shù)是10。

基數(shù)是最小的數(shù)字,只能由多個(gè)符號(hào)表示。 不同的計(jì)數(shù)系統(tǒng)具有不同的基數(shù),因此,相同的數(shù)字在不同的計(jì)數(shù)系統(tǒng)中可以表示不同的數(shù)字。

十進(jìn)制   二進(jìn)制    十六進(jìn)制
RADIX=10  RADIX=2   RADIX=16
0         0         0
1         1         1
2         10        2
3         11        3
4         100       4
5         101       5
6         110       6
7         111       7
8         1000      8
9         1001      9
10        1010      A
11        1011      B
12        1100      C
13        1101      D
14        1110      E
15        1111      F
16        10000     10
17        10001     11

看上表,可以看到相同的數(shù)字11在不同的計(jì)數(shù)系統(tǒng)中可以表示不同的數(shù)字。如果基數(shù)是2,那么它表示數(shù)字為 3。如果基數(shù)是16,那么它指的是數(shù)字17。

你可能已經(jīng)注意到,在我們的示例中,當(dāng)輸入為11時(shí),parseInt返回3,這對(duì)應(yīng)于上表中的二進(jìn)制列。

函數(shù)參數(shù)

JS 中函數(shù)調(diào)用,我們可以傳入任意的參數(shù),即使它們不等于聲明時(shí)的函數(shù)參數(shù)的數(shù)量。缺少的參數(shù)被視為undefined 的,并且會(huì)忽略額外的參數(shù),但會(huì)保存在類似數(shù)組的arguments對(duì)象中。

function foo(x, y) {
    console.log(x);
    console.log(y);
}
foo(1, 2);      // 打印 1, 2
foo(1);         // 打印 1, undefined
foo(1, 2, 3);   // 打印 1, 2    
map()

map是 Es6 中新出的一個(gè)數(shù)組方法,它是一個(gè)高階函數(shù),通過傳入一個(gè)函數(shù)進(jìn)行邏輯操作,并返回一個(gè)數(shù)組, 例如,以下代碼將數(shù)組中的每個(gè)元素乘以3

function multiplyBy3(x) {
    return x * 3;
}
const result = [1, 2, 3, 4, 5].map(multiplyBy3);
console.log(result);   // logs [3, 6, 9, 12, 15];


現(xiàn)在,將console.log作為參數(shù)傳給 map,來打印數(shù)組的元素:

[1, 2, 3, 4, 5].map(console.log);

等價(jià)于
 
 [1, 2, 3, 4, 5].map((val, index, array) => 
     console.log(val, index, array));

所以 map 回調(diào)方法中會(huì)傳入三個(gè)參數(shù),分別是 當(dāng)前遍歷的項(xiàng),當(dāng)前索引,及遍歷的整個(gè)數(shù)組。

原因

ParseInt有兩個(gè)參數(shù):stringradix。 如果提供的基數(shù)是虛值,則默認(rèn)情況下,基數(shù)設(shè)置為10

parseInt("11");                => 11
parseInt("11", 2);             => 3
parseInt("11", 16);            => 17
parseInt("11", undefined);     => 11 (radix is falsy)
parseInt("11", 0);             => 11 (radix is falsy)

現(xiàn)在一步一步解析開頭的事例。

["1", "7", "11"].map(parseInt);       => [1, NaN, 3]

// 第一次迭代: val = "1", index = 0, array = ["1", "7", "11"]
parseInt("1", 0, ["1", "7", "11"]);   => 1

因?yàn)?b>0是虛值,基數(shù)設(shè)置為默認(rèn)值10。parseInt()只接受兩個(gè)參數(shù),因此忽略了第三個(gè)參數(shù)["1"、"7"、"11"]。以10為基數(shù)的字符串“1”表示數(shù)字1

 // 第二次迭代: val = "7", index = 1, array = ["1", "7", "11"]
parseInt("7", 1, ["1", "7", "11"]);   => NaN

在基數(shù)1系統(tǒng)中,符號(hào)“7”不存在。與第一次迭代一樣,忽略最后一個(gè)參數(shù)。因此,parseInt()返回NaN

 // Third iteration: val = "11", index = 2, array = ["1", "7", "11"]
parseInt("11", 2, ["1", "7", "11"]);   => 3

在基數(shù)2(二進(jìn)制)系統(tǒng)中,符號(hào)“11”表示數(shù)字3。

至此原因已經(jīng)明了了。 有興趣可以試著寫下下列的打印結(jié)果:

["1", "7", "11"].map(numStr => parseInt(numStr));


代碼部署后可能存在的BUG沒法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具 Fundebug。

## 交流

干貨系列文章匯總?cè)缦?,覺得不錯(cuò)點(diǎn)個(gè)Star,歡迎 加群 互相學(xué)習(xí)。

https://github.com/qq44924588...

我是小智,公眾號(hào)「大遷世界」作者,對(duì)前端技術(shù)保持學(xué)習(xí)愛好者。我會(huì)經(jīng)常分享自己所學(xué)所看的干貨,在進(jìn)階的路上,共勉!

關(guān)注公眾號(hào),后臺(tái)回復(fù)福利,即可看到福利,你懂的。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104766.html

相關(guān)文章

  • Can't connect to X11 window server using &#03

    摘要:項(xiàng)目在中啟動(dòng)正常,在環(huán)境下生成驗(yàn)證碼圖片時(shí),報(bào)錯(cuò)分析原因,是下沒有啟動(dòng)的圖形渲染解決方案編輯文件,在其中加入然后立即生效一下配置文件 war項(xiàng)目在windows中啟動(dòng)正常,在linux環(huán)境下生成驗(yàn)證碼圖片時(shí),報(bào)錯(cuò):、 Cant connect to X11 window server using localhost:12.0 as the value of th showImg(htt...

    printempw 評(píng)論0 收藏0
  • 【python】[轉(zhuǎn)載]UnicodeEncodeError: 'ascii'

    摘要:原因在安裝時(shí),默認(rèn)的編碼是,當(dāng)程序中出現(xiàn)非編碼時(shí),的處理常常會(huì)報(bào)這樣的錯(cuò),不過在就不會(huì)有這樣的問題。 1、原因 python2.7在安裝時(shí),默認(rèn)的編碼是ascii,當(dāng)程序中出現(xiàn)非ascii編碼時(shí),python的處理常常會(huì)報(bào)這樣的錯(cuò),不過在python3就不會(huì)有這樣的問題。 2、解決辦法 臨時(shí)解決方法: 代碼中加入如下三行import sys reload(sys) sys.setd...

    Airy 評(píng)論0 收藏0
  • ( 第二篇 )仿寫'Vue生態(tài)'系列___'模板小故事.'

    摘要:第二篇仿寫生態(tài)系列模板小故事本次任務(wù)承上完成第一篇未完成的熱更新配置核心完成模板解析模塊的相關(guān)編寫很多文章對(duì)模板的解析闡述的都太淺了本次我們一起來深入討論一下盡可能多的識(shí)別用戶的語句啟下在結(jié)構(gòu)上為雙向綁定等模塊的編寫打基礎(chǔ)最終效果圖一模板頁(yè) ( 第二篇 )仿寫Vue生態(tài)系列___模板小故事. 本次任務(wù) 承上: 完成第一篇未完成的熱更新配置. 核心: 完成模板解析模塊的相關(guān)編寫, ...

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

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

0條評(píng)論

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