使用此方法将字符串转换为整数有任何副作用吗?

Are there are any side effects of using this method to convert a string to an integer

本文关键字:任何 副作用 整数 此方法 字符串 转换      更新时间:2023-09-26

如果我将字符串转换为如下所示的数字,是否有任何副作用…

var numb=str*1;

如果我检查下面的代码,它说这是一个数字。

var str="123";
str=str*1;
if(!isNaN(str))
{
  alert('Hello');   
}
如果使用这种方法有什么问题请告诉我。

当您使用parseFloatparseInt时,转换不那么严格。1b5 -> 1.

使用1*number+number转换将导致NaN输入无效的数字。虽然不像parseInt,浮点数将被正确解析。

包含所有可能的相关选项的表。

//Variables    // parseInt  parseFloat  + 1* /1   ~~ |0 ^1 >>0  >>>0
var a = '123,',//   123        123       NaN       0     & <<0   0
    b = '1.e3',//   1          1000      1000      1000          1000
    c = '1.21',//   1          1.21      1.21      1             1
    d = '0020',//   16         20        20        20            20
    e = '0x10',//   16         0         16        16            16
    f = '3e9', //   3          3000000000  <--    -1294967296    3000000000
    g = '3e10',//   3          30000000000 <--    -64771072      4230196224
    h = 3e25  ,//   3          3e+25     3e+25     0             0
    i = '3e25',//   3          3e+25     3e+25     0             0
    j = 'a123',//   NaN        NaN       NaN       0             0
    k = '  1 ',//   1          1         1         1             1
    l = '    ',//   NaN        NaN       0         0             0
    m = '.1  ',//   NaN        0.1       0.1       1             1
    n = '1.  ',//   1          1         1         1             1
    o = '1e999',//  1          Infinity  Infinity  0             0
    p = '1e-999',// 1          0         0         0             0
    q = false ,//   NaN        NaN       0         0             0
    r = void 0,//   NaN        NaN       NaN       0             0
    _ = function(){return 1;}, /* Function _ used below */
    s={valueOf:_},//NaN        NaN       1         1             1
    t={toString:_};// 1        1         1         1             1
// Intervals: (-1e+20, +1e20)  (-∞,+∞)   (-∞,+∞)   (-2³¹,+2³¹)   [0, 2³²)
// In FF9 and Chrome 17, Infinity === Math.pow(2, 1024), approx. 1.7976e+308
// In FF9 and Chrome 17, bitwise operators always return 0 after about ±1e+25

数字转换方法说明:

  • 如果在去掉空格后的第一个字符不是数字,则数字转换总是失败。
  • parseInt 返回第一个参数的整数表示形式。当基数(第二个参数)被省略时,基数取决于给定的输入。
    0_ =八进制(基数为8),0x_ =十六进制(基数为16)。默认值:八进制数数。
    parseInt忽略任何非数字字符,即使参数实际上是一个数字:参见h, i
    为避免意外结果,请始终指定基数,通常为10:parseInt(number, 10)
  • parseFloat 是容忍度最高的变换器。它总是将输入解释为基数10,而不考虑前缀(与parseInt不同)。有关确切的解析规则,请参阅此处。

    如果字符串包含任何非数字字符,则以下方法将始终无法返回有意义的值。(有效示例:1.e+0 .1e-1)
  • +n, 1*n, n*1, n/1Number(n)是等价的。
  • ~~n, 0|n, n|0, n^1, 1^n, n&n, n<<0n>>0是等价的。这些都是有符号的位操作,并且总是返回一个数值(0而不是NaN)。
  • n>>>0也是位操作,但不保留符号位。因此,只能表示正数,并且上界是232而不是231

  • 当传递一个对象时,parseFloatparseInt只会查看.toString()方法。其他方法首先查找.valueOf(),然后查找.toString()参见q - t

  • NaN ,"不是一个数字":
    typeof NaN === 'number'
    NaN !== NaN。由于这种笨拙,使用isNaN()来检查一个值是否为NaN

何时使用哪个方法?

  • parseFloat( x )当你想获得尽可能多的数字结果时(对于给定的字符串)。
  • parseFloat( (x+'').replace(/^[^0-9.-]+/,'') )当你想要更多的数值结果。
  • parseInt( x, 10 )如果你想获得整数。
  • +x, 1*x ..如果你只关心获得一个对象的真实数值,拒绝任何无效的数字(如NaN)。
  • ~~, 0| ..,如果你想总是得到一个数字的结果(零无效)。
  • >>>0如果负数不存在。
    后两种方法的使用范围有限。看一下表脚

测试给定参数是否为实数的最短方法在中给出了解释::

function isNumber(n) {
    return typeof n == 'number' && !isNaN(n - n);
}