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

Exc*_*ion 6 javascript numbers parsefloat

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

var numb=str*1;
Run Code Online (Sandbox Code Playgroud)

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

var str="123";
str=str*1;
if(!isNaN(str))
{
  alert('Hello');   
}
Run Code Online (Sandbox Code Playgroud)

如果使用此方法有任何疑虑,请告诉我.

Rob*_*b W 25

使用时parseFloat,或者parseInt,转换不太严格.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
Run Code Online (Sandbox Code Playgroud)

数字转换方法说明:

  • 如果修剪空白后的第一个字符不是数字,则数字转换始终失败.
  • parseInt返回第一个参数的整数表示.当省略基数(第二个参数)时,基数取决于给定的输入.
    0_=八进制(base-8),0x_=十六进制(base-16).默认值:base-10.
    parseInt忽略任何非数字字符,即使参数实际上是一个数字:见h,i.
    为避免意外结果,请始终指定基数,通常为10 : parseInt(number, 10).
  • parseFloat是最宽容的转换器.它总是将输入解释为base-10,无论前缀如何(不像parseInt).有关确切的解析规则,请参阅此处.

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

  • 当传递的对象,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);
}
Run Code Online (Sandbox Code Playgroud)

  • NP.如果你仔细阅读答案,你可以编写额外的数字检查方法,例如:`function isNumber(n){return + n === n && n - n === 0;}` (3认同)