开发者问题收集

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