搜尋

首頁  >  問答  >  主體

在我的「for..in...」程式碼中,有時候TypeScript類型錯誤不會出現

在測試時沒有問題,但有時會出現錯誤"無法讀取null的屬性(讀取'nickname')"。 我貼出了一部分代碼。

let seat = [
  null,
  null,
  { nickname: "user1", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe261" },
  null,
  { nickname: "user2", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe261" },
  null,
  null,
  null,
  null,
  null,
  null,
];
for (const i in seat) {
  if (seat[i].nickname === "user1") {
    seat[i] = null;
    break;
  }
}

console.log(seat);

我不知道為什麼有時候沒有問題,突然就出現了錯誤。

for (const i in seat) {
  if (seat[i] !== null && seat[i].nickname === "user1") {
    seat[i] = null;
    break;
  }
}

我透過改變上述形式的程式碼暫時解決了問題。 我對原因很好奇...

P粉166779363P粉166779363447 天前519

全部回覆(1)我來回復

  • P粉903969231

    P粉9039692312023-09-10 00:29:02

    這是因為數組中的一些元素是空值,所以你應該添加一個條件來檢查,就像你所做的seat[i] !== null,但你也可以使用可選鏈操作符?.

    參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Optional_chaining

    #
    for (const i in seat) {
      if (seat[I]?.nickname === "user1") {
        seat[i] = null;
        break;
      }
    }

    範例: 如果你的資料像下面這樣,你不需要新增條件或可選鏈操作符。

    let seat = [
      { nickname: "user1", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe261" },
      { nickname: "user4", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe263" },
      { nickname: "user5", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe264" },
      { nickname: "user3", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe265" },
      { nickname: "user1", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe267" },
      { nickname: "user2", uuid: "d94e81f3-df66-45f6-a593-c7ee6ccfe269" },
    ];
    for (const i in seat) {
      if (seat[i].nickname === "user1") {
        seat[i] = null;
        break;
      }
    }

    回覆
    0
  • 取消回覆