【问题标题】:How to solve TypeError: Cannot read property '' of undefined如何解决 TypeError: Cannot read property \'\' of undefined
【发布时间】:2022-10-18 05:33:06
【问题描述】:
我觉得一些简单的代码应该可以工作:
function getUser(id) {
// get user from DB
var user;
return user;
}
var user = getUser(1);
var uid = user.getId();
console.log(uid);
错误是:
未捕获的类型错误:无法读取未定义的属性(读取“getId”)
到底是怎么回事?
【问题讨论】:
标签:
javascript
typeerror
undefined
【解决方案1】:
应该将user 设置为具有getId() 方法的对象的函数改为返回undefined。该值没有任何属性或方法,因此会引发显示的错误。
有几种方法可以解决这个错误,但归根结底是当getUser 返回undefined 时要决定你想做什么。你可以抛出一个不同的、信息量更大的错误。在您知道您没有从getUser(1) 回复User 的时候:
class User {
#id = 1;
constructor() {}
get id() {
return this.#id;
}
set id(value) {
this.#id = value;
}
getId() {
return this.id;
}
}
function getUser(id) {
// get user from DB
var user;
return user;
}
var user = getUser(1);
if (!(user instanceof User)) {
throw new Error(`The value returned from getUser(1): ${JSON.stringify(user)} was not a User.`);
}
var uid = user.getId();
console.log(uid);
或者稍后,通过the "optional chaining" operator:
class User {
#id = 1;
constructor() {}
get id() {
return this.#id;
}
set id(value) {
this.#id = value;
}
getId() {
return this.id;
}
}
function getUser(id) {
// get user from DB
var user;
return user;
}
var user = getUser(1);
var uid = user?.getId();
if (isNaN(uid)) {
throw new Error(`The value returned from getUser(1).getId(): ${JSON.stringify(uid)} was not a number.`);
}
console.log(uid);
您也可以选择将问题传递给下一个消费者。因此,假设代码是重言式getUserId(userId) 函数的一部分,您可以再次通过我们的朋友可选链接运算符?. 传递未定义。
class User {
#id = 1;
constructor() {}
get id() {
return this.#id;
}
set id(value) {
this.#id = value;
}
getId() {
return this.id;
}
}
function getUser(id) {
// get user from DB
var user;
return user;
}
function getUserId(id) {
var user = getUser(id);
var uid = user?.getId();
return uid;
}
console.log(getUserId(1));