一道JS试题激发的思索

    ["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地点

    原文作者:master_yoda
    原文地址: https://segmentfault.com/a/1190000005956935
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞