【问题标题】:Why does increment using ++ work with strings in javascript?为什么使用 ++ 递增与 javascript 中的字符串一起使用?
【发布时间】:2015-07-03 09:34:04
【问题描述】:

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

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

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

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

http://jsfiddle.net/m4nka9d3/

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

【问题讨论】:

  • 几周来我看到的最有趣的问题之一。就像大多数非常好的问题一样,它在回答的过程中教会了我一些东西。

标签: javascript type-conversion increment unary-operator


【解决方案1】:

之所以这样工作,是因为任何一个自增运算符所做的第一件事就是将其操作数强制为一个数字,这是在§11.3.1 of the spec 中。是的,在规范中,这是您可以信赖的东西。

跳过一些讨论,算法是:

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

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

【讨论】:

  • 谢谢.. 我一直认为x++x += 1 是相同的,但显然这是一个重要的区别。
  • @billynoah:这是一个非常非常好的观察结果。在大多数具有类 B 语法的语言(C、Java 等)中,++x 本质上是x += 1(不是x++,表达式的最终值不同)将是一个准确的陈述。但不是 JavaScript,它的类型很松散。 :-)
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多