为什么我可以+=
在字符串上使用,但我不能-=
在其上使用?
例如...
var test = "Test";
var arr = "⇔"
test += arr;
alert(test); // Shows "Test⇔"
test -= arr;
alert(test); // Shows "NaN"
为什么我可以+=
在字符串上使用,但我不能-=
在其上使用?
例如...
var test = "Test";
var arr = "⇔"
test += arr;
alert(test); // Shows "Test⇔"
test -= arr;
alert(test); // Shows "NaN"
简短的回答是 - 它没有被定义为使用字符串。
更长的答案:如果您在两个字符串上尝试减法运算符,它将首先将它们转换为数字,然后执行算术。
"10" - "2" = 8
如果你尝试一些非数字的东西,你会得到一个与 NaN 相关的错误:
"AA" - "A" = NaN
因为+
运算符连接字符串,但-
运算符仅将数字相减。
至于为什么——可能是因为很难确定人们在相互减去字符串时想要做什么。
例如:
"My string is a very string-y string" - "string"
这应该怎么做?
如上所述,-=
运算符不会重载以使用字符串,它仅适用于数字。
如果您尝试将它与字符串一起使用,则运算符将尝试将两个操作数都转换为Number
,这就是您得到 的NaN
原因,因为:
isNaN(+"foo"); // true
要删除字符串上的arr
内容,您可以替换它:test
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"
这是因为减号不是有效的字符串运算符,而加号被重载以处理数字(加法运算符)和字符串(连接运算符)。
你希望从中得到什么结果?
通常,编程语言不定义字符串的减法。+= 并不是真正的加法,而是串联。
因为+(加号)也是字符串连接运算符,而-(减号)只适用于减法。如果 JavaScript 可以将 2 个字符串附加在一起,它不会抱怨,但如果你尝试减去 2 个字符串,它就没有任何意义。