zoukankan      html  css  js  c++  java
  • js map

    ["1","2","3"].map(parseInt)
    RETURN: [1,NaN,NaN]

    ["1","2","3"].map(e => parseInt(e))
    RETURN: [1,2,3]

    看看 parseInt 的 MDN文档, 其中对返回 NaN 的描述:

    parseInt
    An integer number parsed from the given string. If the first character cannot be converted to a number, NaN is returned ( 如果第一个字符不能被转换成数字,parseInt 返回 NaN。)

    基本判断是因为 parseInt 的返回值不正确
    parseInt 的语法是 parseInt(string[, radix])radix 默认为 10

    回头看开头的例子: ["1","2","3"].map(parseInt)
    并没有为 parseInt 明确的传递参数

    再看看 map

    Array.prototype.map
    Array.prototype.map(callback(currentValue, index, array) {
    // Return element for new_array
    }[, thisArg])
    callback 函数会被自动传入三个参数:当前的数组元素,元素索引,原数组本身。

    明显的, callback函数声明, 并且自动会接受三个参数
    再回头看开头的例子: ["1","2","3"].map(parseInt)
    这种直接调用已有函数的写法(注1)使 parseInt 自动接收了三个参数
    造成 NaN 的原因就是第二个参数被传入了 元素索引

    注1:
    parseInt 就是一个函数声明
    可以简单看做是:

    	function parseInt(string, radix){}
    

    前面提到, callback 默认会自动传递三个参数
    默认传递的参数与 parseInt 的语法冲突
    所以 radix 既不是默认值又得不到正确的值, 就返回 NaN

  • 相关阅读:
    实验四Web服务器2
    发际线与我作队团队作业(五):冲刺总结1
    读书笔记
    socket3
    使用CAS来实现个单例模式
    基于无锁的C#并发队列实现
    C#3.0中的“多重继承”
    对并发/并行编程的总结
    谈谈多线程编程(二) 不变对象
    谈谈多线程编程(一) 安全性策略
  • 原文地址:https://www.cnblogs.com/lcysgsg/p/7643727.html
Copyright © 2011-2022 走看看