zoukankan      html  css  js  c++  java
  • 网红面试题['1','2','3'].map(parseInt)解析

    1、console.log(['1','2','3'].map(parseInt));

    答案:[1,NaN,NaN];

    首先是map方法的定义

    map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

    map() 方法按照原始数组元素顺序依次处理元素。

    注意: map() 不会对空数组进行检测。

    注意: map() 不会改变原始数组。

    语法

    array.map(function(currentValue,index,arr), thisValue)

    实例

    1 var nums=[10,20,30];
    2     nums.map(function(value,index,arr){
    3         document.write('value值为:'+values); //10 20 30
    4         document.write('index值为:'+index); //0 1 2
    5         document.write('arr值为:'+arr); //[10,20,30]
    6     }

    生成新数组元素的函数,使用三个参数:

    currentValue
    callback 数组中正在处理的当前元素。

    **index可选 ** 看到这里先注意起来这个参数,思考一下
    callback 数组中正在处理的当前元素的索引。

    array可选
    callback map 方法被调用的数组。

    thisArr可选
    执行 callback 函数时使用的this 值。

    map 也是常有用的一个array的prototype方法,大家并不陌生,好现在我们来看一看 parseInt,这个方法

    原因
    原因: 其实就是 map的callback的第二个参数 index 也就是当前元素的索引 被当做parseInt 的第二个参数radix 的来使用了

    我们原本以为我们的的三次调用时这样的

    1 parseInt('1')
    2 parseInt('2')
    3 parseInt('3')

    实际上是这样被调用的

    1 parseInt('1',0,thisArray);
    2 parseInt('2',1,thisArray);
    3 parseInt('3',2,thisArray);

    第一次,当我我们第一次调用的时候 是这样的:parseInt('1',0),转十进制的返回1

    第二次,调用第二个index参数是1,也是说1作为数值的基础。规范里说的很清楚了,如果基础是非0或者小于2,函数都不会查询字符串直接返回NaN

    第三次,2作为基数。这就意味着字符串将被解析成字节数,也就是仅仅包含数值0和1。parseInt的规范第十一步指出,它仅尝试分析第一个字符的左侧,这个字符还不是要求基数的有效数字。这个字符串的第一个字符是“3”,它并不是基础基数2的一个有效数字。所以这个子字符串将被解析为空。第十二步说了:如果子字符串被解析成空了,函数将返回为NaN

    所以这里的结果就应该是[1,NaN,NaN].

  • 相关阅读:
    POJ
    CodeForces
    部分和问题
    NOIP200502校门外的树
    消灭虫子
    抓牛
    最长不下降子序列的长度
    HDNoip201501计算结果最小
    抽签
    Ants
  • 原文地址:https://www.cnblogs.com/lymvv/p/10483876.html
Copyright © 2011-2022 走看看