让我们看一下下面的 JavaScript 代码。
<script type="text/javascript" lang="javascript">
function test()
{
alert('2'+8);
alert(8-'2');
}
</script>
在第一个警报框中,显示 2 和 8 串联的结果,即28。然而,在第二个警报框中,它显示两个数字的减法,即6. How?
The +
运算符超载。如果任何操作数是字符串,则执行字符串连接。如果有两个数字,则执行加法。这-
不会以这种方式重载,并且所有操作数都会转换为数字。
从规格来看:
11.6.1 加法运算符(+) http://ecma262-5.com/ELS5_HTML.htm#Section_11.6.1
(...)
7. 如果输入(lprim) 是字符串或类型(rprim) 是字符串,那么
- 返回连接 ToString( 的结果的字符串lprim) 后接 ToString(rprim)
8. 返回对 ToNumber( 进行加法运算的结果lprim) 和 ToNumber(rprim).
(...)
11.6.2 减法运算符(-) http://ecma262-5.com/ELS5_HTML.htm#Section_11.6.2
(...)
5.让lnum是 ToNumber(lval).
6.让rnum是 ToNumber(rval).
7. 返回减法运算的结果lnum and rnum.
(...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)