javascript - Chrome 控制台将对象属性显示为未定义

标签 javascript google-chrome

我是对象编程的新手。我正在将一个对象记录到 Chrome 控制台,并且不可避免地注意到了一个奇怪的行为。

Some objects properties appear as undefined and as if they had values at the same time

某些属性在日志底部显示为未定义,但在顶部具有值。

当我从函数返回对象时,它会返回定义的相同属性,因此定义了 Dirty SockMicrophone。那么为什么控制台认为它们不是呢?

我的代码:

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/

相关文章:

javascript - 对所有用户使用 Office 365 身份验证

javascript - 幻灯片放映淡入淡出效果是抽搐

javascript - 构建实时网站的选项

javascript - 无论如何要更改 "Name"或 "Initiator",或在 Chrome 开发工具的 WebView 中添加新选项卡?

google-chrome - 如何忽略开发工具中的某些错误?

javascript - 使用在 Firefox 中不可见的 Fabric.js 将 svg 图像添加到 Canvas 中

javascript - Vue 开发和生产构建看起来不同

php - 如何修复 Websocket 握手代码?

google-chrome - 如何在 Chrome 中配置网络 worker ?

javascript - Google Chrome JavaScript Fade : style. 不透明度和 setTimeout