为什么在使用push()时会不断在数组内获取数组?

dum*_*000 5 javascript arrays function ecmascript-6

我试图了解MDN关于.push().apply()的文档,因为我遇到了一个问题,即我最终在项目中的数组内放置了一个数组。我已经建立了一些实验代码来说明我的问题。

谁能解释为什么里面的数组内容foo()在另一个数组中打印?我不明白为什么它不为两个console.log()实例打印一个数组。

var animals = [];
var chickens = 'chickens';
var cows = 'cows';

animals.push(cows);
animals.push(chickens);

console.log(animals); // > Array ["cows", "chickens"]

function foo(...animals) {
  console.log(animals); // > Array [["cows", "chickens"]] <-- why is this one inside another array?
}; 
Run Code Online (Sandbox Code Playgroud)

我以为使用.apply()可以解决问题,但无法正常工作。例如...

animals.push.apply(animals, cows);
animals.push.apply(animals, chickens);

// Error: second argument to Function.prototype.apply must be an array
Run Code Online (Sandbox Code Playgroud)

Jac*_*ord 5

由于...(rest / spread语法)会根据传递的参数创建一个新数组-因此,将数组设为["chickens", "cows"]会导致[["chickens", "cows"]]。通过删除...in 解决此问题foo

var animals = [];
var chickens = 'chickens';
var cows = 'cows';

animals.push(cows);
animals.push(chickens);

console.log(animals); 

function foo(animals) {
  console.log(animals); 
}; 

foo(animals);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: auto; }
Run Code Online (Sandbox Code Playgroud)