【问题标题】: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));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-25
      • 2020-04-16
      • 2020-12-21
      • 1970-01-01
      • 2019-08-05
      • 2020-10-13
      • 2017-04-24
      • 2023-03-15
      相关资源
      最近更新 更多