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


    首先,要想理解这个结果,就必须先深入理解parseInt函数和map函数的含义。

    parseInt()

    用法:将传入的字符串解析成数值,并返回一个结果。

    语法:parseInt(string,radix)

    string 必填。待转换的字符串参数。
    radix 选填,若忽略次参数或传入0,则以十进制来解析。转换使用的基数(即多少进制)。取值范围在2~36之间,如果不在这个范围,则解析结果会返回NaN。

    注意:

    parseInt()会根据传入的字符串识别出整数格式,如果字符串以“0x”开头且后跟数字字符,就会将其当做一个十六进制数,如果以“0”开头且后跟字符串,ECMAScript3则会将其当做一个八进制数来解析(ECMAScript5会判断为十进制)。

    map

    ECMAScript5的内置数组迭代方法,将数组作为它的参数,对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。

    语法:array.map(callbackfn[, thisArg])

    例子:将数组每一项乘以2以后,返回新数组

    [1,2,3].map(function(value) {
       return  value*2;
    })

    注意:

    回调函数的使用为:function callbackfn(item, index, array) {},即会传入三个参数——数组每一项元素的值、元素的索引、整个数组对象。

    标题的原因

    因为parseInt()是javaScript的内置函数,所以在用map迭代时,会给parseInt()函数传入三个值,即传入的情况是这样的:

    //强制把数组元素的索引传到parseInt()的第二个参数中
    parseInt("1", 0, ["1", "2", "3"]);
    parseInt("2", 1, ["1", "2", "3"]);
    parseInt("3", 2, ["1", "2", "3"]);    

    第三个数组参数被忽略,运行的结果为:

    将字符串“1”转换成十进制,结果为1;

    将字符串“2”转换成1进制,这里不存在1进制,也就是说不符合2~36的范围,返回NaN;

    同理,第三个元素的处理也是NaN。

    因此!最后返回的结果为标题中的[1,NaN,NaN]。

  • 相关阅读:
    使用yarn来替代npm
    React及Nextjs相关知识点小结
    appstore-react v2.0—redux-actions和redux-saga的应用
    开机SystemServer到ActivityManagerService启动过程分析
    java 读取气象专业格式NetCDF文件
    maven项目对于maven远程仓库没有资源的解决办法
    leaflet 使用kriging.js实现前端自定义插值
    leaflet 使用高德地图实例
    uni-app上使用leaflet地图的解决方案
    MySQL创建新用户并且赋予权限
  • 原文地址:https://www.cnblogs.com/xiaokeai0110/p/9645147.html
Copyright © 2020-2023  润新知