Nam*_*oel 128 javascript optimization
哪个更好?
我问这只是为了削减几个字节,因为我可以使用+ x而不是数字(x).parsefloat做得更好吗?
Nat*_*all 270
parseFloat
/ parseInt
用于解析字符串,而Number
/ +
用于将值强制转换为数字.他们的行为不同.但首先让我们看看他们的行为在哪里:
parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000
Run Code Online (Sandbox Code Playgroud)
因此,只要您有标准数字输入,就没有区别.但是,如果您的输入以数字开头,然后包含其他字符,则parseFloat
截断字符串中的数字,同时Number
给出NaN
(不是数字):
parseFloat('1x'); // => 1
Number('1x'); // => NaN
Run Code Online (Sandbox Code Playgroud)
另外,Number
理解十六进制输入parseFloat
而不:
parseFloat('0x10'); // => 0
Number('0x10'); // => 16
Run Code Online (Sandbox Code Playgroud)
但是Number
对于空字符串或仅包含空格的字符串,行为很奇怪:
parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0
Run Code Online (Sandbox Code Playgroud)
总的来说,我觉得Number
更合理,所以我几乎总是Number
亲自使用(你会发现很多内部JavaScript函数也都使用Number
).如果某人'1x'
打字我更喜欢显示错误而不是将其视为输入错误'1'
.我真正做出异常的唯一一次是当我将一个样式转换为一个数字时,在这种情况下parseFloat
是有用的,因为样式有一个像这样的形式'3px'
,在这种情况下我想放弃'px'
部分然后得到它3
,所以我发现parseFloat
有用这里.但是你真正选择哪一个取决于你以及你想接受哪种形式的输入.
请注意,使用一元运算+
符与使用Number
函数完全相同:
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40
Run Code Online (Sandbox Code Playgroud)
所以我通常只是简单地使用+
.只要你知道它的作用,我就会发现它很容易理解.
不同之处在于当输入不是"正确的数字"时会发生什么.Number
返回NaN
时parseFloat
"尽可能多地"解析.如果空字符串叫Number
回报0
,而parseFloat返回NaN
.
例如:
Number("") === 0 // also holds for false
isNaN(parseFloat("")) === true // and null
isNaN(Number("32f")) === true
parseFloat("32f") === 32
Run Code Online (Sandbox Code Playgroud)
在这些示例中,您可以看到不同之处:
Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;
parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;
Run Code Online (Sandbox Code Playgroud)
parseFloat 有点慢,因为它搜索字符串中数字的第一次出现,而 Number 构造器从包含带有空格的数值或包含假值的字符串创建一个新的数字实例。
PS 如果你对一些通用的类型转换解决方案感兴趣,你可以阅读我博客中关于类型转换的文章:http : //justsimplejs.blogspot.com/2012/08/data-type-conversion.html
归档时间: |
|
查看次数: |
68176 次 |
最近记录: |