【发布时间】:2011-02-28 14:19:55
【问题描述】:
我在 SO 上的一个问题上阅读了以下内容:
'7' + 4 给出 '74',而 '7' - 4 在 JavaScript 中给出 3
为什么会这样?
【问题讨论】:
标签: javascript operator-overloading
我在 SO 上的一个问题上阅读了以下内容:
'7' + 4 给出 '74',而 '7' - 4 在 JavaScript 中给出 3
为什么会这样?
【问题讨论】:
标签: javascript operator-overloading
+ 运算符在 JavaScript 中被重载以执行连接和加法。 JavaScript 确定执行哪个操作的方式是基于操作数的。如果其中一个操作数不属于 Number 类(或 number 原始类型),则两者都将被强制转换为字符串以进行连接。
3 + 3 = 6 3 + '3' = 33 '3' + 3 = 33 (新对象) + 3 = '[对象对象]3'
但是,- 运算符仅适用于数字,因此在操作期间操作数将始终转换为数字。
【讨论】:
+ 是字符串连接运算符,因此当您执行'7' + 4 时,您会将4 强制转换为字符串并附加它。 - 运算符没有这种歧义。
如果您想明确使用parseInt() 或parseFloat():
parseInt('7', 10) + 4
为什么要将基数指定为 10?所以'077' 不会被解析为八进制。
【讨论】:
Number('077'),它有点像parseFloat,并且始终将字符串视为基数为10。
+'7' + 4
因为 + 是集中,如果你想添加两个数字你应该先解析它们 parseInt() 和 - 符号是减法
【讨论】:
由于第一部分是字符串 ('7'),Javascript 中的符号 + 先被解释为连接然后加法。因此,解释器将第二部分 (4) 转换为字符串并将其连接起来。
至于'7' - 4,除了减法没有别的意思,所以减法就完成了。
【讨论】:
'+' 运算符是为字符串和数字定义的,所以当你将它应用于字符串和数字时,数字将被转换为字符串,然后字符串将被连接: '7' + 4 => '7' + '4' => '74' 但是 '-' 只定义为数字,而不是字符串,所以字符串 '7' 将被转换为数字: '7' - 4 => 7 - 4 => 3
【讨论】: