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 的一些细节是否知道的问题。

  • 相关阅读:
    计算 sql查询语句所花时间
    iframe自适应高度,以及一个页面加载多个iframe
    窗体移动API和窗体阴影API
    js复习:
    web组合查询:
    web登陆,增删改加分页。
    cookie和Session传值
    控件及其数据传输
    ASP.NET WebForm
    三月总结
  • 原文地址:https://www.cnblogs.com/sinosaurus/p/13215052.html
Copyright © 2011-2022 走看看