首页 > 解决方案 > Chrome 未捕获类型错误:无法读取未定义的属性

问题描述

我是一个编程新手,正在阅读 Steven Foote 的《Learning to Program》一书。我试图找出为什么 Chrome 告诉我我有这两个错误:

未捕获的类型错误:无法读取未定义的属性“当前日期”未捕获的
类型错误:无法读取未定义的属性“项目名称”

这是我写的:

值.js

var kbValues = {
 projectName: 'kittenbook',
 versionNumber: '0.0.1',
 currentDate: new Date(), 
 currentTime: [kbValues.currentDate.getFullYear() + '-' + 
(kbValues.currentDate.getMonth() + 1)+ '-' +
kbValues.currentDate.getDate() + ' at ' + 
kbValues.currentDate.getHours() + ':' + 
kbValues.currentDate.getMinutes() + ':' + 
kbValues.currentDate.getSeconds()]
};

kittenbook.js

document.body.innerHTML = '<h1>Hello, ' + userName + '!</h1>' + 
'<p>' + kbValues.projectName + '' + kbValues.versionNumber +
' accessed on: ' + kbValues.currentTime + '</p>';

清单.json

{
    "manifest_version": 2,
    "name": "kittenbook",
    "description": "Replace photos on Facebook with kittens",
    "version": "0.0.1",
    "content_scripts": [
        {
            "matches": ["*://www.facebook.com/*"],
            "js": ["js/values.js","js/kittenbook.js"]
        }
    ]
}

我对此真的很陌生。

标签: javascriptgoogle-chrome-extension

解决方案


您不能在其定义期间使用变量的属性,您正在尝试访问 kbValues 的 currentDate,然后再分配它

如您所见,此代码段将返回错误:

var kbValues = {
 projectName: 'kittenbook',
 versionNumber: '0.0.1',
 currentDate: new Date(), 
 currentTime: [kbValues.currentDate.getFullYear() + '-' + 
  (kbValues.currentDate.getMonth() + 1)+ '-' +
   kbValues.currentDate.getDate() + ' at ' + 
   kbValues.currentDate.getHours() + ':' + 
   kbValues.currentDate.getMinutes() + ':' + 
   kbValues.currentDate.getSeconds()]
};

相反,您应该尝试在变量定义之前分配日期,这样您就可以访问它

var currentDate = new Date();

var kbValues = {
 projectName: 'kittenbook',
 versionNumber: '0.0.1',
 currentDate, 
 currentTime: [currentDate.getFullYear() + '-' + 
  (currentDate.getMonth() + 1)+ '-' +
   currentDate.getDate() + ' at ' + 
   currentDate.getHours() + ':' + 
   currentDate.getMinutes() + ':' + 
   currentDate.getSeconds()]
};

console.log(kbValues)


推荐阅读