为什么使用++的增量可以在javascript中使用字符串?

时间:2015-04-24 16:56:33

标签: javascript type-conversion increment unary-operator

通常当我使用jQuery获取表单输入的值时,我必须在执行任何数学运算之前将其转换为数字。例如,使用一元加运算符进行转换,然后递增:

var x = +$(this).val();
x += 1;

但由于某种原因,++可以使用字符串并自动进行转换:

var x = $(this).val();
x++;

http://jsfiddle.net/m4nka9d3/

为什么呢?这总是安全吗?

1 个答案:

答案 0 :(得分:5)

它的工作方式是这样的,因为增量运算符中的任何一个都强制将其操作数强制转换为数字,这在§11.3.1 of the spec中。在规范中,是的,这是你可以信赖的东西。

跳过一些观察,算法是:

  • oldValue成为ToNumber(GetValue(lhs))
  • newValue成为将值1添加到oldValue的结果,使用与+运算符相同的规则(参见11.6.3)。
  • 致电PutValue(lhs, newValue)
  • 返回oldValue

然而,+=被定义为quite differently强迫数字作为早期步骤,因此最终应用字符串连接而不是添加。