• JavaScript map+parseInt 容易产生的误区


    map

    /**
     * 语法:
     * var new_array = arr.map(function callback(currentValue[,index[,array]]){
     *  // return element for new_array
     * }[,thisArg])
     */
    
    • callback: 生成新数组元素的函数,3个参数
      • 1-currentValue, callback数组中正在处理的当前元素
      • 2-index(可选): callback数组中正在处理的当前元素的索引
      • 3-array(可选): map方法调用的数组
    • thisArg: 可选-执行callback函数时值被作用做this

    简单示例

    var numbers = [1, 4, 9]
    var double = numbers.map(x => x * 2)
    console.info(double)
    
    • 通常情况下,map 方法中的 callback 函数只需要接受一个参数,就是正在被遍历的数组元素本身。
    • 但这并不意味着 map 只给 callback 传了一个参数。这个思维惯性可能会让我们犯一个很容易犯的错误。

    parseInt in map

    const newIntArray = ["1", "2", "3"].map(parseInt)
    console.info(newIntArray) // [ 1, NaN, NaN ]
    
    • parseInt 经常被带着一个参数使用, 但是这里接受两个:
    • 第一个参数是一个是表达式,第二个是callback function
    • .map传递3个, element,index,array
    • 第3个参数array被忽视了,但index没有被忽略

    解析过程

    • parseInt(string, radix) 将一个字符串 string 转换为 radix 进制的整数, radix 为介于2-36之间的数。
    • 格式为: parseInt(string,radix) -> map(parseInt(value,index))
    • step 0: parseInt("1",0) // 1 <= //radix为0时,且string参数不以“0x”和“0”开头时,按照10为基数处理。这个时候返回1
    • step 1: parseInt("2",1) // NaN
    • step 2: parseInt("3",2) // NaN

    解决办法: 使用箭头函数

    const newIntArrayWithNumber = ["1.2", "2.3", "3.4"].map(num => parseInt(num, 10))
    console.info(newIntArrayWithNumber) // [ 1, 2, 3 ]
    
    Keep learning
  • 相关阅读:
    【转】html的meta总结
    style.left 与offsetLeft之间的区别
    VM886
    js 获取数据类型
    JS序列化URL方法
    userData 本地存储
    第一章 1.6 HTML5 的新功能(二)
    第一章 1.6 HTML5 的新功能(一)
    第一章 1.5 无插件范式
    第一章 1.4 新的认识
  • 原文地址:https://www.cnblogs.com/leslie1943/p/13363962.html
Copyright © 2020-2023  润新知