• ["1", "2", "3"].map(parseInt)


    为什么["1", "2", "3"].map(parseInt) 为 1,NaN,NaN;

    parseInt() 

    parseInt() 函数可解析一个字符串,并返回一个整数。

    parseInt(string, radix)
    参数描述
    string 必需。要被解析的字符串。
    radix

    可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

    如果省略该参数或其值为 ‘0‘,则数字将以 10 为基础来解析。如果它以 ‘”0x”‘ 或 ‘”0X”‘ 开头,将以 16 为基数。

    如果该参数小于 2 或者大于 36,则 ‘parseInt()‘ 将返回 ‘NaN‘

    map 方法

    对数组的每个元素调用定义的回调函数并返回包含结果的数组。

    array.map(callbackfn, thisArg])
    参数定义
    array 必需。一个数组对象。
    callbackfn 必需。一个接受**最多**三个参数的函数。对于数组中的每个元素,‘map‘ 方法都会调用 ‘callbackfn‘ 函数一次。
    thisArg 可选。可在 ‘callbackfn‘ 函数中为其引用 ‘this‘ 关键字的对象。如果省略 ‘thisArg‘,则 ‘undefined‘ 将用作 ‘this‘ 值。

    回调函数语法

    回调函数的语法如下所示:

    function callbackfn(value, index, array)
    回调参数定义
    value 数组元素的值。
    index 数组元素的数字索引。
    array1 包含该元素的数组对象。

    现在回到最初的问题,

    ["1", "2", "3"].map(parseInt) 实际上是这么调用的:

    parseInt('1',0,["1", "2", "3"]);

    parseInt('2',1,["1", "2", "3"]);

    parseInt('3',2,["1", "2", "3"]);

    JS函数一般会自动忽视多余的参数,parseInt仅仅需要两个参数,所以我们并不需要担心第三个参数array参数对parseInt的影响。

    那么第二个参数是如何影响parseInt的?

    在第一次调用时,parseInt的第二个参数是0,上面已经说了,省略该参数或其值为 ‘0‘,则数字将以 10 为基础来解析,所以parseInt('1',0)为1;
    parseInt('2',1) 如果该参数小于 2 或者大于 36,则 ‘parseInt()‘ 将返回 ‘NaN‘。,则 parseInt('2',1)为NaN;

    parseInt('3',2)第一个string参数以2进制进行解析,而2进制只有0 1 组成,没有3,所以 parseInt('3',2)为NaN;

    此问题解决方法

    方法一:

    ['1','2','3'].map(function(value){
            return parseInt(value)
    })

    方法二:

    ['1','2','3'].map(Number)

    延伸:

    var a=["1", "2", "3", "4","5",6,7,8,9,10,11,12,13,14,15];
    a.map(parseInt);
    // [1, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 9, 11, 13, 15, 17, 19]

    因为

    parseInt(10,9)//9
    parseInt(11,10)//11
    parseInt(12,11)//13 
    ...
  • 相关阅读:
    Python之路【第二十九篇】:面向对象基础
    Python之路【第二十八篇】:生成器与迭代器
    爬虫实战---爬取猫眼电影
    Selenium库详解
    PyQuery库详解
    BeautifulSoup解析库详解
    深浅拷贝的使用场景分析
    关于大数据量下Core Data的数据迁移
    IOS5中的新增方法详解
    自定义UISearchBar
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/9470998.html
Copyright © 2020-2023  润新知