【问题标题】:Adding and subtracting strings and numbers in Javascript - auto type conversion?在Javascript中添加和减去字符串和数字 - 自动类型转换?
【发布时间】:2011-12-28 07:28:59
【问题描述】:
让我们看看下面的 Javascript 代码。
<script type="text/javascript" lang="javascript">
function test()
{
alert('2'+8);
alert(8-'2');
}
</script>
在第一个警告框中,它显示了 2 和 8 的串联结果,即 28。然而,在第二个警告框中,它显示了两个数字的减法,即 6。怎么样?
【问题讨论】:
标签:
javascript
type-conversion
【解决方案1】:
第一个:它将第二个操作数转换为第一个操作数(字符串),因为 + 也用于字符串连接。
2nd:它将第二个操作数转换为数字,因为 - 仅用于数字操作。
【解决方案2】:
+ 运算符已重载。如果任何操作数是字符串,则执行字符串连接。如果您有两个数字,则执行加法。 - 没有以这种方式重载,所有操作数都转换为数字。
来自规范:
11.6.1 The Addition operator ( + )
(...)
7.如果Type(lprim)是String或者Type(rprim)是String,那么
- 返回作为连接 ToString(lprim) 后跟 ToString(rprim) 的结果的字符串
8。返回对 ToNumber(lprim) 和 ToNumber(rprim) 应用加法运算的结果。
(...)
11.6.2 The Subtraction Operator ( - )
(...)
5. 设 lnum 为 ToNumber(lval)。
6. 设 rnum 为 ToNumber(rval)。
7.返回对lnum和rnum进行减法运算的结果。
(...)
【解决方案3】:
+ 用于字符串连接和加法。如果任一操作数是字符串,则使用连接。 - 仅用于减法,两个操作符总是转换为数字。
【解决方案4】:
+ 用于连接和加法,但与字符串一起使用时,默认为连接。 - 不能用于字符串,所以它的操作数被转换为数字。
编辑:这并不意味着与上面的帖子相同!呵呵
【解决方案5】:
如果你不想这样,一个简单的解决方法是:(1*'2')+8 JSYK