我是对象编程的新手。我正在将一个对象记录到 Chrome 控制台,并且不可避免地注意到了一个奇怪的行为。
某些属性在日志底部显示为未定义,但在顶部具有值。
当我从函数返回对象时,它会返回定义的相同属性,因此定义了 Dirty Sock
和 Microphone
。那么为什么控制台认为它们不是呢?
我的代码:
function updateInventory(arr1, arr2) {
let currentInv = array2DToObject(arr1);
let newItems = array2DToObject(arr2);
console.log(currentInv); //This is the log I'm speaking about.
for(let key in currentInv) {
if(newItems.hasOwnProperty(key)) {
currentInv[key] = currentInv[key] + newItems[key];
delete newItems[key];
} else {
currentInv[key] = newItems[key];
delete newItems[key];
}
}
if(Object.keys(newItems === 0) && newItems.constructor === Object) {
return currentInv;
} else {
return 'A mistake has occured, newItems obj has not been emptied correctly';
}
function array2DToObject (arr) {
return arr.reduce((acc, curr) => {
acc[curr[1]] = curr[0] ;
return acc;
}, {});
}
}
arr1 和 arr2 的值如下:
arr1 = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"]
];
arr2 = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];
最佳答案
console.log 输出末尾的信息框(在 Chrome 控制台中)可能表明输出刚刚重新计算。如果你想知道输出时对象的状态,我建议先创建一个字符串,然后输出。在您的示例中,请尝试:
console.log(JSON.stringify(currentInv));
然后看看会发生什么。
关于javascript - Chrome 控制台将对象属性显示为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45358898/