为什么javascript在作为参数或索引传入时将数组解析为字符串

为什么javascript在作为参数或索引传入时将数组解析为字符串,javascript,arrays,arguments,Javascript,Arrays,Arguments,考虑一下这个代码 例1: function plus(a) {return a+10} ([1]) // "110" 例2: var arr = [1,2,3,4,5,6,7] arr[[1]] // 2 arr.splice([1],1); arr // (6) [1, 3, 4, 5, 6, 7] 有人能解释为什么作为参数传入数组会转换为字符串吗?(这就是这里发生的事情) 有人能解释为什么传入数组作为参数吗 没有 它一直被视为一个数组,直到您尝试使用它为止 它击中了台阶,让我走吧?Top

考虑一下这个代码

例1:

function plus(a) {return a+10}
([1]) // "110"
例2:

var arr = [1,2,3,4,5,6,7]
arr[[1]] // 2
arr.splice([1],1);
arr // (6) [1, 3, 4, 5, 6, 7]
有人能解释为什么作为参数传入数组会转换为字符串吗?(这就是这里发生的事情)

有人能解释为什么传入数组作为参数吗

没有

它一直被视为一个数组,直到您尝试使用它为止

它击中了台阶,让我走吧?TopPrimitive(rval)并根据进行转换

等等,直到它召唤


类似的规则适用于其他示例

简而言之:当在给定上下文中使用数组毫无意义时,将应用类型转换将其转换为适当的数据类型

答案#1-你从中得到一个字符串,所以你需要返回到数字-这里我使用+

函数加(a){return+a+10}

console.log(plus([1]))
运算符不适用于数组。它只适用于数字或字符串

由于javascript不能将数组与+运算符一起使用,因此它会在之前将其转换为字符串。这就是为什么
plus([1])
“110”

如果要添加到阵列,可以使用push方法:

  array.push(newElement);
在第二个示例中,在splice内部,数组与不支持它的运算符一起使用,因此将其转换为数字。如果您查看,您会发现它需要一个数字,而不是一个数组


当您想要使用splice时,您不会传递数组作为第一个参数,而是传递要删除的第一个元素的索引。如果要从阵列中删除2,请执行arr.splice(1,1)

当添加两种不同的数据类型时,Javascript会自动输出特定的数据类型

以下是两个例子:

2+3//5
2+“你好”/“2你好”
当两个数字相加时,输出一个整数。但是,
2
hello
不能以数字形式添加,因此所有内容首先自动转换为字符串,然后追加

在您的情况下也会发生同样的情况–a仍然是一个数组,但不能将数组添加到数字中。因此,两者都转换为字符串,然后追加,最终结果是一个字符串

您可能正在考虑向数组末尾添加值。这是通过以下方式实现的:

a.push(10);
或者,如果要在数组中添加第一项并
10
以获得结果
11
,请使用:

返回[0]+10

但不能将单个数字添加到整个数组中,只能添加到其中一个项目或数组末尾。

+运算符不适用于数组。如果要将_array.push(newElement)的use name_添加到数组中,您正在调用[1]上的toString,这似乎是为什么在函数需要字符串时将数组作为参数传入?对于第二个示例?对于第二个示例?