zoukankan      html  css  js  c++  java
  • ECMAscript5中的map

       今天看到到这样一个问题:

        ["1", "2", "3"].map(parseInt) 执行结果是什么?

         结果是[1,NAN,NAN],很出乎我的意料。。。。

      人家给出的解释是这样的:

    [1, NaN, NaN] 因为 parseInt 需要两个参数 (val, radix) 但 map 传了 3 个 (element, index, array)

    然后再犀牛书上查了下map的API:

      map()按照从小到大的顺序遍历array的序号,并为每一个元素调用一次f,对于序号i,调用时候带三个参数,f的返回值则存储在新数组的i处:

       a[i] = f(array[i],i,array)

    一旦map()将array中的每一个元素都传递给f,并将返回的结果保存到新数组中,则返回该新数组


    我做了一下尝试:

    ["1", "2", "3"].map(parseInt(x,10))   //报错,我坑爹了,map()接受的是一个方法,不是执行结果

    ["1", "2", "3"].map(function(x){return parseInt(x,10)})  //这个结果是[1,2,3],是对的

    ["1", "2", "3"].map(function(x){return parseInt(x)})    //这个也是对的,因为parseInt默认的是10进制的,不过还是自己写靠谱,有时候0x开头的数字抽风


    然后我查了下forEach,跟map介绍差不多,然后看到提到调用f(array[i],i,array),突然似乎明白了,原来每次调用的时候指定了传入的三个参数结果相当于这样:

    parseInt("1",0)//1

    parseInt("2",1)//NAN

    parseInt("3",2)//NAN

    我们可以这样试试:

    ["1", "0", "0"].map(parseInt)   //返回[1, NaN, 0]

    ["1", "0", "2"].map(parseInt)   //返回[1, NaN, NaN]

    说明了问题是parseInt接受参数的问题了,查了下

    parseInt第二个参数描述如下:

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

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

    好吧,到此为止,问题清楚了

     


  • 相关阅读:
    tool button 工具按钮
    push button 交替输出
    信号和槽
    qt新建一个工程
    lambda表达式
    横向滚动插件
    jquery循环延迟加载,用于在图片加载完成后再加载js
    dedecms的特性-----不完整
    让边框和文本一样高,不受line-height影响,可以使用padding,padding可以用于行内元素
    行内元素的行高对布局也有影响
  • 原文地址:https://www.cnblogs.com/onedayof2010/p/4273036.html
Copyright © 2011-2022 走看看