Chrome 未捕获类型错误:无法读取未定义的属性
2020-02-19
1347
我是编程方面的新手,正在学习 Steven Foote 所著的《学习编程》一书。我试图找出 Chrome 为何告诉我出现了这两个错误:
Uncaught TypeError: Cannot read property ‘currentDate’ of undefined
Uncaught TypeError: Cannot read property ‘projectName’ of undefined
这是我编写的内容:
values.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>';
manifest.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"]
}
]
}
我对此真的很陌生。
1个回答
您不能在变量定义期间使用变量的属性,您试图在分配它之前访问 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)
Krzysztof Krzeszewski
2020-02-19