我发现在JavaScript中,所有101/100、"101"/100、101/"100"和"101"/"100"的结果都是1.01(在Chrome、FF和IE11上检查)。但我找不到任何关于这种行为的文档。
因此,我的问题是是否可以安全地(跨浏览器)使用此功能,如果这样做是否是一个好习惯(或者在除法之前使用parseInt,如果变量可能是字符串)?
因此,我的问题是是否可以安全地(跨浏览器)使用此功能,如果这样做是否是一个好习惯(或者在除法之前使用parseInt,如果变量可能是字符串)?
/
时,字符串会被隐式转换为数字,然后执行除法运算。parseInt
或parseFloat
或其他方法明确地将其转换为数字。parseInt("101", 10) / 100
或者
parseFloat("101") / 100
*1
或/1
是依赖于JavaScript引擎来优化实际操作并执行强制转换。我不完全确定它是否可以这样做(IEEE-754数学的变幻莫测)。当然,99.999%的时间性能都无关紧要,现代系统会将浮点操作卸载到芯片上。但是,在JavaScript文化中,“+”成语根深蒂固,没有这个问题,所以…(你经常看到的另一个是'value = value | 0')。 - T.J. Crowder类型强制转换在这里发挥作用。引用@Barmar的答案来自JavaScript中的类型强制转换到底是什么?
类型强制转换意味着当运算符的操作数是不同类型时,其中一个将被转换为另一个操作数类型的“等效”值。
你观察到的原因也适用于其他操作 -
1 + "2" will give you "12"
1 - "2" will give you -1
(因为字符串上的"-"操作未定义,就像除法一样")
在例子"101/100"中,操作"/"将决定强制转换,因为没有在字符串上定义该运算符的操作,但对于"数字"是有的。
只要您清楚类型强制转换在操作中的作用,使用它是安全的(至少在现代浏览器中)。