考虑:
var a = Array(3);
var b = [undefined,undefined,undefined];
Run Code Online (Sandbox Code Playgroud)
是什么原因a.map并b.map产生不同的结果?
a.map(function(){ return 0; }); //produces -> [undefined,undefined,undefined]
b.map(function(){ return 0; }); //produces -> [0,0,0]
Run Code Online (Sandbox Code Playgroud) 我试图理解'空'稀疏数组(例如new Array(3))和等效'空'密集数组(具有3个未定义条目的数组)之间的区别.
我可以用这两种方式创建一个包含3个未定义值的数组:
var sparse = new Array(3);
// or
var sparse = [,,,];
var dense = Array.apply(null, Array(3)); // See dense array link below
Run Code Online (Sandbox Code Playgroud)
如果我为其中任何一个执行console.log,结果是:
[undefined, undefined, undefined]
Run Code Online (Sandbox Code Playgroud)
如果我遍历每个数组以将其与另一个数组进行比较,它们将严格匹配:
console.log(sparse.length === dense.length);
// true
for (var i = 0; i < dense.length; i++) {
console.log(i +':'+ (dense[i] === sparse[i]));
}
// '0:true'
// '1:true'
// '2:true'
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用.forEach(或map,reduce等),那么回调将永远不会在稀疏数组上调用,但会在密集数组上调用三次:
sparse.forEach(function(val,i){
console.log(i +':'+ val);
});
// Nothing. No-op.
dense.forEach(function(val,i){
console.log(i +':'+ val);
}); …Run Code Online (Sandbox Code Playgroud) 我想制作一个0到1之间的随机数组,所以我试过:
var randList = _.map(new Array(5), Math.random);
Run Code Online (Sandbox Code Playgroud)
但我没有得到我预期的随机元素列表,而是:
console.log(JSON.stringify(randList));
"[null,null,null,null,null]"
Run Code Online (Sandbox Code Playgroud)
为什么我得到一个null数组而不是随机数?