【问题标题】:Adding and Subtracting Numbers as Strings将数字加减为字符串
【发布时间】:2011-02-28 14:19:55
【问题描述】:

我在 SO 上的一个问题上阅读了以下内容:

'7' + 4 给出 '74',而 '7' - 4 在 JavaScript 中给出 3

为什么会这样?

【问题讨论】:

    标签: javascript operator-overloading


    【解决方案1】:

    + 运算符在 JavaScript 中被重载以执行连接和加法。 JavaScript 确定执行哪个操作的方式是基于操作数的。如果其中一个操作数不属于 Number 类(或 number 原始类型),则两者都将被强制转换为字符串以进行连接。

    3 + 3 = 6
    3 + '3' = 33
    '3' + 3 = 33
    (新对象) + 3 = '[对象对象]3'

    但是,- 运算符仅适用于数字,因此在操作期间操作数将始终转换为数字。

    【讨论】:

    • 一定会喜欢 java 的工作方式以及它引起的所有有趣的错误。
    • 哎呀,意思是javascript,输入java。
    • 这里没有人拿弱打字开玩笑吗?这让我很失望。
    【解决方案2】:

    + 是字符串连接运算符,因此当您执行'7' + 4 时,您会将4 强制转换为字符串并附加它。 - 运算符没有这种歧义。

    如果您想明确使用parseInt()parseFloat()

    parseInt('7', 10) + 4
    

    为什么要将基数指定为 10?所以'077' 不会被解析为八进制。

    【讨论】:

    • 以防万一:使用 parseInt('7', 10) 和 base 参数,这样 '077' 就不会被误认为是八进制整数。
    • 或者...您可以使用Number('077'),它有点像parseFloat,并且始终将字符串视为基数为10。
    • 你也可以只使用+'7' + 4
    【解决方案3】:

    因为 + 是集中,如果你想添加两个数字你应该先解析它们 parseInt() 和 - 符号是减法

    【讨论】:

      【解决方案4】:

      由于第一部分是字符串 ('7'),Javascript 中的符号 + 先被解释为连接然后加法。因此,解释器将第二部分 (4) 转换为字符串并将其连接起来。

      至于'7' - 4,除了减法没有别的意思,所以减法就完成了。

      【讨论】:

        【解决方案5】:

        '+' 运算符是为字符串和数字定义的,所以当你将它应用于字符串和数字时,数字将被转换为字符串,然后字符串将被连接: '7' + 4 => '7' + '4' => '74' 但是 '-' 只定义为数字,而不是字符串,所以字符串 '7' 将被转换为数字: '7' - 4 => 7 - 4 => 3

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多