zoukankan      html  css  js  c++  java
  • 使用map()的小陷阱:parseInt

    假设我们想要把一个字符串数组的每一项转换成整数,我们很自然就想到了把parseInt作为回调函数传给map()函数,但这样做可能会出现意想不到的结果:

    var strArr = ["1", "2", "3"];
    var numArr = strArr.map(parseInt);
    console.log(numArr); // [1, NaN, NaN]

    在上面的代码中,我们尝试使用map()把数组strArr的每一项由字符串转换成数字,但发现只有第一项成功了,剩余两项却变成了NaN。

    出现这种情况的原因是,parseInt()默认接受两个参数,第一个参数是要转换成整数的字符串,第二个参数表示传入的值是几进制格式的(注意不是转换成几进制的值),而map会默认地把三个参数element, index, array传给callback函数。在上面这种情况下,虽然第三个参数被忽略了,但前两个参数都传给了parseInt,所以以上代码可以看作是:

    var numArr = strArr.map(function(ele,index) {
        return parseInt(ele, index);
    });
    
    //分别来看每一项的话
    
    //parseInt("1", 0) => 1
    //parseInt("2", 1) => NaN
    //parseInt("3", 2) => NaN

    解决办法

    var numArr = strArr.map(function(ele) {
        return parseInt(ele, 10);
    });
    
    // 或者使用箭头函数
    
    var numArr = strArr.map(ele => parseInt(ele, 10));

    注意:因为多数情况下,我们要解析的值都是十进制的,所以强烈建议使用parseInt时始终把10作为第二个参数。

  • 相关阅读:
    用java在mysql中随机插入9000 000条数据
    java连接mysql的一个小例子
    JDK环境变量配置
    JVM工作原理
    线程和进程的区别
    java实现链表
    内连接、外连接、左连接、右连接
    udp协议
    要看的东西
    eclipse快捷键
  • 原文地址:https://www.cnblogs.com/sukiY/p/9194486.html
Copyright © 2011-2022 走看看