为什么添加两个单元素数组给我一个字符串,然后减去它们就给我一个数字?

时间:2019-04-08 18:22:15

标签: javascript

*已编辑

我最近偶然发现了一个有趣的问题以及js中数组的一个特殊问题。

enter image description here

如您所见,以上减法给了我一个数字,但加法给了我一个字符串。我也尝试过乘法和除法,在两种情况下都得到数字。

然后我变得更加好奇并尝试使用多元素数组,这是结果

enter image description here

现在我真的很想弄清楚这是怎么发生的以及为什么发生。请帮我。

编辑:我添加了更多示例,以下是结果

enter image description here

您可以在上方看到“ 1” +“ 1”为“ 11”,但是[]返回一个空数组,[[1]返回1,键为0,我们知道数组也是对象导致混乱。

2 个答案:

答案 0 :(得分:1)

JavaScript数组是对象,算术运算符不适用于它们; +但是执行串联。连接数组对象,concat()

console.log("1" + "1") // = 11
console.log("1" - "1") // = 0

console.log(parseFloat("1") + parseFloat("1")) // = 2
console.log(parseFloat("1" + "1")) // = 11

console.log(eval("1") + eval("1")) // = 2
console.log(eval("1" + "1")) // = 11


var a = [1, 2, 3],
    b = [11, 22, 33, 44];
var c = a.concat(b);

console.log(c)

答案 1 :(得分:0)

对数组中的元素进行操作时,+运算符执行串联操作,而不是加法运算。

例如,如果您查看尝试进行[1, 2, 3] + [4, 5, 6]的情况,则控制台会将数组视为字符串,并将加数直接连接到augend,结果为“ 1、2、34 ,5,6“。 -, /, *, %运算符执行算术运算,该运算是整数运算,而不是字符串或数组运算,并且不能在数组上执行。这就是为什么返回NaN的原因。

如果您想知道为什么将数字作为字符串添加在一起,那是因为强制类型。串联是一个字符串运算,而不是整数运算,因此将数字转换为字符串。

如果要将一个数组附加到另​​一个数组,则可以使用.concat()。如果要添加每个元素(即[0] 1 + [0] 2 ,...),则可以使用for循环。如果要对列表中的元素求和,请对累加器使用reduce。


链接:ExplanationType conversion docs

相关标签: