通常当我使用jQuery获取表单输入的值时,我必须在执行任何数学运算之前将其转换为数字。例如,使用一元加运算符进行转换,然后递增:
var x = +$(this).val();
x += 1;
但由于某种原因,++
可以使用字符串并自动进行转换:
var x = $(this).val();
x++;
为什么呢?这总是安全吗?
答案 0 :(得分:5)
它的工作方式是这样的,因为增量运算符中的任何一个都强制将其操作数强制转换为数字,这在§11.3.1 of the spec中。在规范中,是的,这是你可以信赖的东西。
跳过一些观察,算法是:
oldValue
成为ToNumber(GetValue(lhs))
。newValue
成为将值1
添加到oldValue
的结果,使用与+
运算符相同的规则(参见11.6.3)。PutValue(lhs, newValue)
。oldValue
。然而,+=
被定义为quite differently,不强迫数字作为早期步骤,因此最终应用字符串连接而不是添加。