使用此方法将字符串转换为整数有任何副作用吗?
Are there are any side effects of using this method to convert a string to an integer
如果我将字符串转换为如下所示的数字,是否有任何副作用…
var numb=str*1;
如果我检查下面的代码,它说这是一个数字。
var str="123";
str=str*1;
if(!isNaN(str))
{
alert('Hello');
}
当您使用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
数字转换方法说明:
- 如果在去掉空格后的第一个字符不是数字,则数字转换总是失败。
-
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/1
和Number(n)
是等价的。 -
~~n, 0|n, n|0, n^1, 1^n, n&n, n<<0
和n>>0
是等价的。这些都是有符号的位操作,并且总是返回一个数值(0而不是NaN
)。 -
n>>>0
也是位操作,但不保留符号位。因此,只能表示正数,并且上界是232而不是231。 - 当传递一个对象时,
parseFloat
和parseInt
只会查看.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);
}
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- jQuery中是否内置了任何字符串格式化函数
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 有任何可能将facebook实时信使整合到一个网站中
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- AJAX:$_GET不返回任何值
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 将事件处理程序绑定到任何可能的事件
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- document.styleSheets不返回任何内容
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- Graphiti中是否有任何工具提示功能
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 如果修改原型,是否有任何不良副作用
- 使用此方法将字符串转换为整数有任何副作用吗?
- 测试时的余烬错误:您将需要在运行中包装任何带有异步副作用的代码
- 在编码中使用公共库是否有任何副作用