为什么增量使用++;在javascript中使用字符串?

为什么增量使用++;在javascript中使用字符串?,javascript,type-conversion,increment,unary-operator,Javascript,Type Conversion,Increment,Unary Operator,通常,当我用jQuery获取表单输入值时,我必须在执行任何数学运算之前将其转换为数字。例如,使用一元加号运算符进行转换,然后递增: var x = +$(this).val(); x += 1; 但是由于某种原因,++使用字符串并自动进行转换: var x = $(this).val(); x++; 为什么??这总是安全的吗?它是这样工作的,因为任何一个递增运算符所做的第一件事都是将其操作数强制为一个数字,这是在。在规范中,是的,这是你可以信赖的 跳过某些spectalk,算法为: 让o

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

var x = +$(this).val();
x += 1;
但是由于某种原因,
++
使用字符串并自动进行转换:

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


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

它是这样工作的,因为任何一个递增运算符所做的第一件事都是将其操作数强制为一个数字,这是在。在规范中,是的,这是你可以信赖的

跳过某些spectalk,算法为:

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

然而,
+=
被定义为,作为早期步骤强制使用数字,从而最终应用字符串连接而不是加法。

谢谢。。我总是觉得
x++
x++=1
是一样的,但显然这是一个重要的区别。@billynoah:这是一个非常非常好的观察结果。在大多数具有类似B语法的语言(C、Java等)中,
++x
本质上是
x+=1
(不是
x++
,表达式的最终值是不同的)将是一个准确的语句。但不是JavaScript,因为它的输入很松散。:-)这是我几周来看到的最有趣的问题之一。就像大多数非常好的问题一样,在回答的过程中教会了我一些东西。