*已编辑
我最近偶然发现了一个有趣的问题以及js中数组的一个特殊问题。
如您所见,以上减法给了我一个数字,但加法给了我一个字符串。我也尝试过乘法和除法,在两种情况下都得到数字。
然后我变得更加好奇并尝试使用多元素数组,这是结果
现在我真的很想弄清楚这是怎么发生的以及为什么发生。请帮我。
编辑:我添加了更多示例,以下是结果
您可以在上方看到“ 1” +“ 1”为“ 11”,但是[]返回一个空数组,[[1]返回1,键为0,我们知道数组也是对象导致混乱。
答案 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。