【问题标题】: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.返回对lnumrnum进行减法运算的结果。
    (...)

    【讨论】:

      【解决方案3】:

      + 用于字符串连接和加法。如果任一操作数是字符串,则使用连接。 - 仅用于减法,两个操作符总是转换为数字。

      【讨论】:

        【解决方案4】:

        + 用于连接和加法,但与字符串一起使用时,默认为连接。 - 不能用于字符串,所以它的操作数被转换为数字。

        编辑:这并不意味着与上面的帖子相同!呵呵

        【讨论】:

          【解决方案5】:

          如果你不想这样,一个简单的解决方法是:(1*'2')+8 JSYK

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-07-08
            • 2011-12-05
            • 2017-07-30
            • 1970-01-01
            • 1970-01-01
            • 2014-11-25
            • 2014-10-01
            • 1970-01-01
            相关资源
            最近更新 更多