parseInt()是一个内置的JS函数,用于解析数字字符串中的整数。例如,要解析数字字符串'100':constnumber=parseInt('100');number;//100正如预期的那样,'100'被解析为整数100。parseInt(numericalString,radix)还接受第二个参数:从2到36,代表字符串的基数。例如,指定16表示解析的值为十六进制数。请注意,10不是默认值,2、8、10和16是最常见的。比如我们用parseInt解析一个二进制的数字字符串:constnumber=parseInt('100',2);number;//4100对应二进制数4,所以返回4。1.parseInt的奇怪行为()parseInt(numericalString)总是将其第一个参数转换为字符串(如果它不是字符串),然后将该数字字符串解析为整数值。这就是为什么你可以(但不应该)使用parseInt()来提取浮点数的整数部分:parseInt(0.5);//=>0parseInt(0.05);//=>0parseInt(0.005);//=>0parseInt(0.0005);//=>0parseInt(0.00005);//=>0parseInt(0.000005);//=>0提取浮点数的整数部分,如0.5、0.05等,结果为0,与预期相同。如何提取0.0000005的整数部分?parseInt(0.0000005);//=>5parseInt()将浮点数0.0000005解析为5。为什么parseInt(0.0000005)会有如此奇怪的行为?2、解决parseInt()的怪异行为我们看一下parseInt(numericalString)的第一个参数:如果不是字符串,则将其转为字符串,然后Parse,返回解析后的整数。这可能是第一个线索。然后我们尝试手动将浮点数转换为字符串表示形式:String(0.5);//=>'0.5'String(0.05);//=>'0.05'String(0.005);//=>'0.005'String(0.0005);//=>'0.0005'String(0.00005);//=>'0.00005'String(0.000005);//=>'0.000005'String(0.0000005);//=>'5e-7'显式转换为字符串(0.0000005)字符串的行为不同于其他浮点数:它以指数形式表示。这是第二条重要线索!当指数符号被解析为整数时,我们得到数字5parseInt(0.0000005);//=>5//sameasparseInt(5e-7);//=>5//sameasparseInt('5e-7');//=>5parseInt('5e-7')考虑第一个数字'5',但跳过'e-7'。谜团已揭开!因为parseInt()总是将其第一个参数转换为字符串,所以小于10的6次方的浮点数将表示为指数。parseInt()然后从浮点数的指数表示法中提取整数。另外,为了安全提取浮点数的整数部分,推荐使用Math.floor()函数:Math.floor(0.5);//=>0Math.floor(0.05);//=>0Math.floor(0.005);//=>0Math.floor(0.0005);//=>0Math.floor(0.00005);//=>0Math.floor(0.000005);//=>0Math.floor(0.0000005);//=>03。总结parseInt()是一个将一串数字解析为整数的函数。尝试使用parseInt()提取浮点数的整数部分时必须小心。小于10的-6次方的浮点数(比如0.0000005,即5*10-7)在转换为字符串时写成指数记数法(比如5e-7就是0.0000005的指数记数法)).这就是为什么在parseInt()中使用如此小的浮点数会导致意想不到的结果:仅解析指数符号的重要部分(例如5e-7中的5)。那么现在大家可以试着解释一下为什么parseInt(999999999999999999999)等于1?/dmitripavlutin.com/parseint-mystery-javascript/本文转载自微信公众号“大招天下”,可通过以下二维码关注。转载本文请联系大千世界公众号。
