zoukankan      html  css  js  c++  java
  • ["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]。

  • 相关阅读:
    Codeforces Round #340 (Div. 2)
    搞清楚一下格式化输出
    TYVJ P1091 等差数列 Label:dp
    TYVJ P1098 任务安排 Label:倒推dp 不懂
    TYVJ P1034 尼克的任务 Label:倒推dp
    TYVJ P1045 &&洛谷 1388 最大的算式 Label:dp
    TYVJ P1046 Blast Label:dp
    TYVJ P1051 选课 Label:多叉转二叉&&树形dp(虐心♥)
    TYVJ P1073 加分二叉树 Label:区间dp
    二叉树遍历入门 Lebal:research
  • 原文地址:https://www.cnblogs.com/xiaokeai0110/p/9645147.html
Copyright © 2011-2022 走看看