我正在尝试了解.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
答案 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