zoukankan      html  css  js  c++  java
  • ['1','2','3'].map(parseInt)

    最近几次老是看到这个问题 ['1','2','3'].map(parseInt) ,感觉都没有说到重点,也不知道是太简单了还是怎么的,都不屑于解释了,既然如此,我便自告奋勇来说道说道了。

    一些必要的说明

    • map 使用很简单,不做过多说明
    • parseInt 需要说一下,我们都知道用来对数据进行取整,若是不合理,便返回 NaN 。而且这货还有一个可选属性 radix ,而这也是我们此次重点说明的对象。

    parseInt

    在 mdn 上可以到 parseInt 的第二个参数 radix 取值范围为 2~36 ,如果取值是 0, 1 又会如何呢。

    parseInt(1, 0)
    parseInt(1, 1)
    

    首先解释为 0 ,根据mdn上的说明:

    如果 radix 是 undefined0或未指定的,JavaScript会假定以下情况:

    1. 如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被解析为十六进制数。
    2. 如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix
    3. 如果输入的 string 以任何其他值开头, radix 是 10 (十进制)。

    根据上面可以知道,若 radix=0 时,相当于默认为 10进制 ,那接下来好说了

    parsetInt(1, 0) 
    // 相当于
    parsetInt(1, 10) // => 1 * 10^0 = 1 * 1 = 1
    

    因而 parseInt(1, 0) = 1

    接下来解释 1

    1 表示 1进制 但是目前 1进制 具体是用 0 还是用 1 ,没有明确的说明,详见知乎 因而导致

    parsetInt(1,1) 直接变成了 NaN

    • 这里需要简单说明一下
      • 二进制:0,1 数字进行
      • 八进制:0~7
      • 10进制: 0~9
      • 16进制:0~9 A~F

    现在可以来说明 ['1','2','3'].map(parseInt) 为何是 1,NaN,NaN

    其实可以变成这样的写法

    ['1', '2', '3'].map(function (value, index) {
    	return parseInt(value, index)
    })
    // 细节
    index = 0: parsetInt('1', 0) = 1
    index = 1: parsetInt('2', 1) = NaN
    index = 2: parsetInt('3', 2) = NaN // 因为 2进制必须是 0,1数字表示
    

    假设上面的数组变更一下呢

    ['1', '2', '011'].map(parseInt) // 1,NaN,3
    

    此致,便解释清楚了,考点在于 进制转换,以及 parseInt 的一些细节是否知道的问题。

  • 相关阅读:
    poj 2411 Mondriaan's Dream 骨牌铺放 状压dp
    zoj 3471 Most Powerful (有向图)最大生成树 状压dp
    poj 2280 Islands and Bridges 哈密尔顿路 状压dp
    hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
    poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
    poj 1185 炮兵阵地 状压dp
    poj 3254 Corn Fields 状压dp入门
    loj 6278 6279 数列分块入门 2 3
    VIM记事——大小写转换
    DKIM支持样本上传做检测的网站
  • 原文地址:https://www.cnblogs.com/sinosaurus/p/13215052.html
Copyright © 2011-2022 走看看