• 你真的会用parseInt方法吗?


      学习前端时间不短了,最早使用parseInt这个函数已经不记得具体时间了,在我的概念里对它的使用了解是parseInt(string, radix);把string转成数字,radix参数是把数字以多少进制表示出来,一直到今天我99.99%的情况使用场景都是radix等于10,而且也没出现过什么问题。但是最近遇到一个题目['1', '2', '3', '4', '5'].map(parseInt)我竟然不能很准确的写出正确答案。所以我今天要重新学习一下这个方法了,在认真研究这个方法的时候,还没有想象中的那么容易,下面先看一下这个方法的解释

     

    radix取值范围每个具体的值对应关系是:

    2 - [0, 1],3 - [0, 1, 2],10 - [0, 1, ..., 9],11 - [0, 1, ..., 9, a], 36 - [0, ..., a, ..., Z]

    ['1', '2', '3', '4', '5'].map(parseInt)相当于['1', '2', '3', '4', '5'].map((cur, index) => parseInt(cur, index));

    cur和index的对应关系以及对结果的分析如下:

    parseInt('1', 0); // 0 和 10相当于10进制

    parseInt('2', 1); // 如果该参数小于2或者大于36,则 parseInt将返回 NaN

    parseInt('3', 2); // 2进制的取值范围是0 1没有3,所以返回NaN

    parseInt('4', 3); // 3进制的取值范围是0 1 2没有4,所以返回NaN

    parseInt('5', 4); // 4进制的取值范围是0 1 2 3没有5,所以也返回NaN

    其他情况:

    parseInt('256', 3); // 3进制的取值范围是0 1 2没有56,所以返回2

    parseInt('234', 5); // 5进制的取值范围是0 1 2 3 4,返回69

    parseInt在确定被解析的值在radix取值的范围后,还会进行最后一步计算,计算规则如下

    比如parseInt('234', 5);

    2 * Math.pow(5, 2) + 3 * Math.pow(5, 1) + 4 * Math.pow(5, 0);  // 运行结果为69

    参考链接https://www.cnblogs.com/webBlog-gqs/p/8727677.html

  • 相关阅读:
    CF 848C
    BZOJ 4025 二分图
    支配树学习笔记
    CF1120D Power Tree
    Codeforces 360A(找性质)
    Codeforces 142D(博弈)
    Codeforces 142B(二分染色、搜索)
    GYM 101981E(开关反转性质)
    Codeforces 1150E(树、线段树)
    Codeforces 1150D(字符串dp)
  • 原文地址:https://www.cnblogs.com/typeof/p/12168571.html
Copyright © 2020-2023  润新知