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

时间:2019-04-20 02:20:44

标签: javascript arrays function ecmascript-6

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

谁能解释为什么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?
}; 

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

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

// Error: second argument to Function.prototype.apply must be an array

2 个答案:

答案 0 :(得分:5)

因为...(其余语法/扩展语法)从传递的参数中生成了一个新数组-因此,从["chickens", "cows"]中构成一个数组将得到[["chickens", "cows"]]。通过删除...中的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);
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 1 :(得分:3)

了解此function loadlink() { $('#links').load('getCount.php', function() { $(this).unwrap(); }); } loadlink(); // This will run on page load setInterval(function() { loadlink() // this will run after every 3 seconds }, 3000); Rest parameters

->
// "Rest parameters" receives the arguments which is 
// a like array object, and uses its indexes for creating an array.
function fn(...params) {
  console.log(params);
} 

fn("Ele", "From", "Stack"); // Multiple params will be spread as indexes of the array.
fn(["Ele", "From", "Stack"]); // In this case, one param (an array) will be used as the only index in the array.
fn(); // In this case, an empty array will be generated.

另一方面,函数.as-console-wrapper { max-height: 100% !important; top: 0; }的第二个参数应该是一个描述参数的数组

apply