美文网首页
面试小题:parseInt与map

面试小题:parseInt与map

作者: 大檬煮WesleyQ | 来源:发表于2018-12-14 10:16 被阅读4次

    parseInt()的几个例子

    var b = parseInt("01");
    alert("b="+b);
    var c = parseInt("09/08/2009");
    alert("c="+c);
    

    结果:b=1,c=0

    parseInt()用来解析字符串,返回整数,有几个特点:

    1.无视被解析字符串最前和最后的空格,即:" 111 "和"111"是一样的

    2.正规格式是parseInt(string,radix)。

    第一个参数是被解析的字符串,第二个参数是进制(可不些)

    第二个参数的特点:

    ①如果radix省略或为0,则按默认进制(十进制)进行解析

    ②radix为2~36之间的整数,如果在这个范围之外,返回NaN

    ③string的首字符为0,则默认解析为8进制。string首字符为0x(0X)则默认解析为16进制。其他情况默认为10进制。

    ④最好加上第二个参数,不然即使碰到首字符为0,应该以8进制方式进行,在某些浏览器下,如ff也会按10进制进行

    3.解析从第一个可以解析的字符开始,到第一个不能解析的字符(如空格,标点符号等)结束。后面的字符不再解析。如果第一个字符就不可以解析,则返回NaN。

    回到此题来分析

    b的首字母是0,按8进制解析后面的数值,也就是8进制的1。自然返回值为1。<br>c的首字母是0,按8进制解析后面的数值,但是第二个字符9已经不是8进制数,也就是9是第一个不能解析的字符,parseInt("09/08/2009")相当于parseInt("0"),自然返回值是0<br>注:8也不是8进制数,最大到7
    变形:

    var c = parseInt("0119/08/2009");
    alert("c="+c);
    

    var c = parseInt("0119/08/2009");
    alert("c="+c);
    分析:
    相当于parseInt("011"),0*8^2+1*8^1+1*8^0=0+8+1=9,输出结果为c=9

    parseFloat()和parseInt()
    parseInt()可以带参数,指定二进制、八进制或者十六进制(默认十进制),而parseFloat()不带参数,不能解析八进制、十六进制数,就只能按十进制进行。

    再来看parseInt()和.map()结合的例子

    ["1", "2", "3"].map(parseInt) 返回值又是多少呢

    map方法
    array1.map(callbackfn[, thisArg])
    对数组的每个元素,调用定义的回调函数,返回一个数组包含结果
    参数:

    array1:必须。一个数组对象

    callbackfn:必须。最多接受三个参数(数组元素的值,数组元素的索引,包含该元素的数组对象)的回调函数

    thisArg:可选。

    即原例子相当于
    [parseInt("1",0),parseInt("2",1),parseInt("3",2)]
    分析:
    1按十进制转换输出1
    1不在2~36之间,输出NaN
    字符串”3“里面没有合法的二进制数,输出NaN
    所以最后结果是[1,NaN,NaN]

    相关文章

      网友评论

          本文标题:面试小题:parseInt与map

          本文链接:https://www.haomeiwen.com/subject/gydknttx.html