代码之家  ›  专栏  ›  技术社区  ›  jeremy radcliff

检查不存在的子项的值?

  •  1
  • jeremy radcliff  · 技术社区  · 3 年前

    我的html代码包含 <ul id="users"></ul> ,然后用JS代码动态填充

    const li = document.createElement("li");
    li.appendChild(document.createTextNode(`${nameInput.value} : ${emailInput.value}`)
    

    我在html代码中添加了一个按钮来删除该代码中的所有用户 <ul> ,因此: <button class="btn" id="del-user-list" onClick="deleteUserList()">Delete User List</button> .

    JS代码中的deleteUserList函数如下所示:

    function deleteUserList() {
      while (userList.firstChild != "") {
        userList.firstChild.remove();
      }
    }
    

    这在表面上是有效的,但是我意识到在最后一个孩子之后,我的函数将再次检查一个不存在的孩子的值。我记得在学习C和玩链表时,你不想去引用一个指向它的指针 null .

    果然,当我看到控制台时 Uncaught TypeError: Cannot read properties of null (reading 'remove') at deleteUserList (main.js:31:25) at HTMLButtonElement.onclick ((index):29:77)

    这是个问题吗?我能做些什么?我刚开始玩Javascript,现在对这些东西的工作原理没有很好的了解。

    1 回复  |  直到 3 年前
        1
  •  1
  •   Felix Kling    3 年前

    而不是比较 userList.firstChild 对于空字符串,应将其与 null 或者完全忽略比较运算符:

    while (userList.firstChild != null)
    // or
    while (userList.firstChild) 
    

    后者之所以有效,是因为 无效的 返回一个布尔值 false

    null != '' 永远都是 true 因为 用户列表。长子 无论如何都不会是空字符串。它要么是DOM节点,要么是 无效的 .