我意识到在javascript中所有101/100,"101"/ 100,101 /"100"和"101"/"100"导致1.01(在Chrome,FF和IE11上检查).但我找不到有关此行为的文档.
因此,我的问题是,如果(跨浏览器)使用此功能是安全的,并且如果这样做是一个好习惯(或者如果变量可以是字符串,则在分割之前使用parseInt)?
/在字符串上使用时,字符串会隐式转换为数字,然后执行除法运算.
这可能会在所有的浏览器,但它总是很好的做法,转换为数字明确使用parseInt或parseFloat或其他方法.
parseInt("101", 10) / 100
Run Code Online (Sandbox Code Playgroud)
要么
parseFloat("101") / 100
Run Code Online (Sandbox Code Playgroud)
因此,我的问题是使用此功能是否(跨浏览器)安全......
这取决于您对“安全”的定义。使用除法运算符,是的,它是指定的行为:每个操作数都被转换(隐式强制)为一个数字,然后完成数字除法。
但请注意不要将其概括得太远。您可以使用/, *,-但它会咬您+,因为如果任一操作数+是字符串,+则执行字符串连接,而不是加法。
根据您的观点,它可能或可能不“安全”的另一种方式是隐式强制:它使用浏览器的 JavaScript 引擎的规则将字符串转换为数字。一些较旧的浏览器超出了规范(他们过去被允许这样做)并将以 a 开头的数字0视为八进制(基数为 8)而不是十进制。自然地,将“0123”作为数字输入的最终用户可能意味着数字 123,而不是数字 83(123八进制 =83十进制)。JavaScript 引擎不再允许这样做,但一些较旧的引擎可以。
通常,最好显式强制或转换这些操作数。您这样做的选择:
一元运算+符: value = +value将使用 JavaScript 引擎的标准规则将字符串强制转换为数字。字符串中的任何非数字(e科学记数法除外)都会生成结果NaN。此外,+""is 0,这可能不直观。
该Number功能:value = Number(value)。做同样的事情+。
的parseInt功能,通常与一个基数(基数): value = parseInt(value, 10)。这里的缺点是parseInt转换它在字符串开头找到的任何数字,但忽略字符串后面的非数字,所以parseInt("100asdf", 10)是100,不是NaN。顾名思义,parseInt只解析一个整数。
该parseFloat功能:value = parseFloat(value)。允许小数值,并始终以十进制(从八进制或十六进制)工作。parseInt对字符串末尾的垃圾做同样的事情,parseFloat("123.34alksdjf")是123.34.
因此,请选择适合您用例的工具。:-)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |