Javascript join()如何根据参数产生不同的结果?

Javascript join()如何根据参数产生不同的结果?,javascript,function,Javascript,Function,我不太明白为什么下面的join()调用会根据提供的参数类型产生不同的结果 以下是我的发现: var测试=函数(){ var args=Array.prototype.join.call(参数“”); 返回参数 }; console.log(test([1,2,3])/#1:返回1,2,3 log(test(1,2,3))/#2:在代码中返回1_2_3,在第一个示例中只有一个参数,即数组。连接单个元件将移除支架: var测试=函数(){ var args=Array.prototype.joi

我不太明白为什么下面的join()调用会根据提供的参数类型产生不同的结果

以下是我的发现:

var测试=函数(){
var args=Array.prototype.join.call(参数“”);
返回参数
};
console.log(test([1,2,3])/#1:返回1,2,3

log(test(1,2,3))/#2:在代码中返回1_2_3
,在第一个示例中只有一个参数,即数组。连接单个元件将移除支架:

var测试=函数(){
var args=Array.prototype.join.call(参数“”);
返回参数
};
log(test([1,2,3])//args=[[1,2,3]]
log(test(1,2,3))//args=[1,2,3]
console.log([[1,2,3]].join(“”)

console.log([1,2,3].join(“'u'))
第一个,第一个参数是
[1,2,3]
,它与第二个参数连接,第二个参数是nothing->输出是
[1,2,3].toString()


第二个调用,它实际上连接了所有3个参数,导致输出
1_2_3

当您将一个数组传递给
test
时,
arguments
对象成为一个数组数组,而不是普通值的普通数组。这是两者的区别

arguments = [[1,2,3]];


在数组上调用
.join
时,每个内部数组首先被隐式强制为字符串,导致
'1,2,3'
-内部数组的值不会被分隔符
.join
指定,只有外部数组的直接子数组被分隔符
.join
分隔。

因为您传递的是一个数组参数,所以它将其转换为字符串,然后尝试将其与其他参数连接(没有),所以它只返回字符串

var测试=函数(){
var args=Array.prototype.join.call(参数“”);
返回参数
};
日志(测试([1,2,3]);

日志(测试(1,2,3))
结果不同,因为
参数不同

在第一次调用(
test([1,2,3])
时,有一个参数是数组。 在第二次调用中,您有3个参数,每个参数都是一个数字

Array.prototype.join
用于通过数组调用。它将字符串化数组中的每个项


在第一种情况下,参数为“数组”只有一个成员,即数组本身。此参数将被字符串化。字符串化的数组与代码中记录的数组完全相同。

在第一个示例中,您没有调用
。在数组上,而是在
参数上,join
。该变量将使用类似数组的对象填充,该对象将数组作为第一个索引,本质上,您称之为等价物:

让myArguments=[[1,2,3]];

console.log(myArguments.join(“”);
如果您尝试在
测试中
console.log(arguments)
,它的工作原理会很清楚您也可以尝试
测试([1,2,3],[4,5,6])
我不知道如果参数是数组,它会被包装在另一个数组中!这很有意义!@tkim90参数总是被包装在数组中,而不仅仅是当参数是数组时。
arguments = [1,2,3];