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].

  • 相关阅读:
    SPOJ 694 (后缀数组) Distinct Substrings
    POJ 2774 (后缀数组 最长公共字串) Long Long Message
    POJ 3693 (后缀数组) Maximum repetition substring
    POJ 3261 (后缀数组 二分) Milk Patterns
    UVa 1149 (贪心) Bin Packing
    UVa 12206 (字符串哈希) Stammering Aliens
    UVa 11210 (DFS) Chinese Mahjong
    UVa (BFS) The Monocycle
    UVa 11624 (BFS) Fire!
    HDU 3032 (Nim博弈变形) Nim or not Nim?
  • 原文地址:https://www.cnblogs.com/lymvv/p/10483876.html
Copyright © 2011-2022 走看看