将二进制变成十进制一般都是用parseInt(二进制代码,2),但是最近发现parseInt(010,2)和parseInt("010",2)竟然不一样?

    1. parseInt(010,2);
    2. /*结果:NAN*/
    3. parseInt('010',2);
    4. /*结果:2*/

    仔细一想好像确实这么回事,因为parseInt(010,2);中的010,会在转换前变成8(0开头为8进制,010为十进制的8),那么parseInt(8,2)就是NAN了(2进制只有0和1)。

    一般1开头的打不打引号没啥关系:

    1. parseInt(110,2);
    2. /*6*/
    3. parseInt('110',2);
    4. /*6*/

    但是也不全是,例如一个32位,但是是1打头的:

    1. parseInt(111111111111111111111111111111,2);
    2. /*1*/
    3. parseInt('111111111111111111111111111111',2);
    4. /*1073741823*/

    为啥parseInt(111111111111111111111111111111,2);是1呢,因它太大了,它的结果是为1.111111111111111e+29。会变成parseInt(1,2),因此是1。

    因此最安全的将二进制转十进制,需要将二进制串打引号。

    回到顶部
    我要评论

    所有评论

      相关文章