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

标签 javascript numbers parsefloat

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

var numb=str*1;

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

var str="123";
str=str*1;
if(!isNaN(str))
{
  alert('Hello');   
}

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

最佳答案

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

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

涵盖所有可能的相关选项的表格。

//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

数字转换方法注意事项:

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

    如果字符串包含任何非数字字符,以下方法将始终无法返回有意义的值。(有效示例: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是等价的。这些是 signed bitwise操作,并将始终返回一个数值(零而不是 NaN )。
  • n>>>0也是一个bitwise operation , 但不保留符号位。因此,只能表示正数,上限是 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如果负数不存在。
    后两种方法的范围有限。查看表格的页脚。

this answer 解释了测试给定参数是否为实数 的最短方法:

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

关于javascript - 使用此方法将字符串转换为整数是否有任何副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8112757/

相关文章:

javascript - 请建议一种服务于包含服务器端代码的 JavaScript 的策略

javascript - 知道为什么在 coffeescript 中会发生这种情况

javascript - 计算多种货币格式元素的总和

javascript - parseFloat 舍入

Javascript toFixed() 问题

javascript - 通过 javascript 自动聚焦于新添加的元素

javascript - addEventListener 和 attachEvent 有什么区别?

Excel:如何对同一单元格中的两个不同数字求和?

javascript - 为什么在 Javascript 中,包含 300 的字符串与包含 1000 的字符串相比会返回 false?

c - 程序读取未格式化的 .wav 文件中的字节数会产生奇怪的结果吗?