【问题标题】:Javascript String Assignment OperatorsJavascript 字符串赋值运算符
【发布时间】:2010-12-17 14:20:55
【问题描述】:

为什么我可以在字符串上使用+=,但我不能在其上使用-=

例如...

var test = "Test";
var arr = "⇔"

test += arr;
alert(test);  // Shows "Test⇔"

test -= arr;
alert(test);  // Shows "NaN"

【问题讨论】:

  • 注意:我不是傻瓜;我知道你不能“减去”一个字符串。有人问我这个问题,我不知道如何回答,所以我在这里发布。
  • 当操作数之一是字符串时,+ 运算符是连接运算符。
  • 只为字符串定义了两个运算符:++= (developer.mozilla.org/en/…)

标签: javascript operators assignment-operator


【解决方案1】:

通常,编程语言不为字符串定义减法。 += 并不是真正的加法,而是串联。

【讨论】:

  • php 在处理字符串方面要好很多
【解决方案2】:

这是因为减号不是有效的字符串运算符,而加号被重载以处理数字(加法运算符)和字符串(连接运算符)。

您希望从中得到什么结果?

【讨论】:

  • 希望“减量”运算符的行为类似于子字符串并撕掉之前附加的内容。
  • 但即使是数字,减号也不是“递减”,而是减号--。减等于-= 只是一个便利运算符,它是类似于表达式a = a - b 的复合运算符
【解决方案3】:

因为+(加号)也是字符串连接运算符,而-(减号)只适用于减法。如果 JavaScript 可以将 2 个字符串附加在一起,它不会抱怨,但如果你尝试减去 2 个字符串,它就没有任何意义。

【讨论】:

    【解决方案4】:

    因为+ 运算符连接字符串,而- 运算符仅将数字相减。

    至于为什么——可能是因为很难确定人们在相互减去字符串时想要做什么。

    例如:

    "My string is a very string-y string" - "string"
    

    这应该怎么做?

    【讨论】:

      【解决方案5】:

      简短的回答是 - 它没有被定义为使用字符串。

      更长的答案:如果你在两个字符串上尝试减法运算符,它会首先将它们转换为数字,然后执行算术。

      "10" - "2" = 8
      

      如果你尝试一些非数字的东西,你会得到一个与 NaN 相关的错误:

      "AA" - "A" = NaN
      

      【讨论】:

        【解决方案6】:

        正如大家所说,-= 运算符不会被重载以处理字符串,它只能处理数字。

        如果您尝试将它与字符串一起使用,运算符将尝试将两个操作数都转换为Number,这就是您得到NaN 的原因,因为:

        isNaN(+"foo"); // true
        

        要删除test 字符串中的arr 内容,您可以replace 它:

        var test = "Test",
            arr = "⇔"
        
        test += arr;
        alert(test);  // Shows "Test⇔"
        
        test = test.replace(arr, ""); // replace the content of 'arr' with "" on 'test'
        alert(test);  // Shows "Test"
        

        【讨论】:

          猜你喜欢
          • 2016-04-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-09
          • 1970-01-01
          • 1970-01-01
          • 2011-11-16
          • 2018-05-20
          相关资源
          最近更新 更多