在javascript中对字符串使用除法运算符(/)

Ars*_*sen 5 javascript

我意识到在javascript中所有101/100,"101"/ 100,101 /"100"和"101"/"100"导致1.01(在Chrome,FF和IE11上检查).但我找不到有关此行为的文档.

因此,我的问题是,如果(跨浏览器)使用此功能是安全的,并且如果这样做是一个好习惯(或者如果变量可以是字符串,则在分割之前使用parseInt)?

Tus*_*har 6

/在字符串上使用时,字符串会隐式转换为数字,然后执行除法运算.

这可能会在所有的浏览器,但它总是很好的做法,转换为数字明确使用parseIntparseFloat或其他方法.

parseInt("101", 10) / 100
Run Code Online (Sandbox Code Playgroud)

要么

parseFloat("101") / 100
Run Code Online (Sandbox Code Playgroud)

分部操作员的ECMAScript规范


T.J*_*der 5

因此,我的问题是使用此功能是否(跨浏览器)安全......

这取决于您对“安全”的定义。使用除法运算符,是的,它是指定的行为:每个操作数都被转换(隐式强制)为一个数字,然后完成数字除法。

但请注意不要将其概括得太远。您可以使用/, *-但它会咬您+,因为如果任一操作数+是字符串,+则执行字符串连接,而不是加法。

根据您的观点,它可能或可能不“安全”的另一种方式是隐式强制:它使用浏览器的 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.

因此,请选择适合您用例的工具。:-)