我使用火狐浏览器。
此代码记录
[]
。
var log = console.log;
function new_comb(aComb) {
var res = [];
log(aComb); // <- This is the line
for (var p in aComb) {
var peg = aComb[p];
var current = peg[peg.length - 1];
for (var i = 0; i < aComb.length; i++) {
if (i == p) continue;
if (current > aComb[i][aComb[i].length - 1]) continue;
var tmp = aComb.splice(0);
tmp[i].push(current);
tmp[p].pop();
res.push(tmp);
}
}
return res;
}
var comb = [
[3, 1],
[9, 2],
[15, 0]];
var res = new_comb(comb);
此代码记录正确的值。
var log = console.log;
function new_comb(aComb) {
var res = [];
log(aComb); // <- This is the line
// note that I comment this out.
/*for (var p in aComb) {
var peg = aComb[p];
var current = peg[peg.length - 1];
for (var i = 0; i < aComb.length; i++) {
if (i == p) continue;
if (current > aComb[i][aComb[i].length - 1]) continue;
var tmp = aComb.splice(0);
tmp[i].push(current);
tmp[p].pop();
res.push(tmp);
}
}*/
return res;
}
var comb = [
[3, 1],
[9, 2],
[15, 0]];
var res = new_comb(comb);
为什么会出现这种情况?
console.log
显示 live 数据,而不是运行时对象的快照。
由于您
splice
将所有数据都从数组中取出,因此一旦您记录它,它几乎就是空的。
如果您想记录数组的快照,请对数组进行字符串化或深度复制。
如果您在最新版本的 Chrome 和 Firefox 中记录对象,您在控制台上记录的是对该对象的引用,这不一定是您调用时对象的“值”
console.log()
,但它是您打开控制台时对象的值。