【问题标题】:Why we are checking for a value if we are already checking for length如果我们已经在检查长度,为什么还要检查一个值
【发布时间】:2020-07-28 20:41:00
【问题描述】:

我很困惑,为什么会发生这种情况,我一直在遵循教师使用的代码

<% if(error && error.length > 0) {%> 
    <div class="alert alert-danger" role="alert"><%= error %> </div>
<% } %>
<% if(success && success.length > 0) { %>
    <div class="alert alert-success" role="alert"><%= success %> </div>
<% } %>

当我们已经在检查它们的长度时,我没有得到检查错误和成功的意义

【问题讨论】:

  • 如果success 为空或未定义,则尝试将.length 关闭会引发错误
  • 反之亦然:在访问其.length 属性之前,您必须检查success 是否“存在”
  • 这是为了避免运行时错误。具体来说是为了避免无法访问未定义的值“长度”的错误。所以if (success)检查不是未定义或空(或空字符串或数字零)然后&amp;&amp;短路电路,也就是说,如果第一部分是假的(如果success是未定义的)那么它确实不评价第二部分。最后,一旦我们知道存在成功,我们就可以安全地评估 success.length &gt; 0
  • 如果您尝试获取undefined 变量或null 变量的长度,您的代码会抛出异常——这有助于您防止此异常
  • 空字符串是虚假的,所以我不确定你为什么需要.length

标签: javascript node.js ejs


【解决方案1】:

这是因为errorsuccess 可能为空,因此访问undefinednull 的属性length 时会出错

【讨论】:

    【解决方案2】:

    因为errorsuccess 可以是undefinednull 并且它们上不会有length,如果你检查长度,你会得到一个错误 您可以改用可选链,如下所示:

    <% if(error?.length) {%> 
        <div class="alert alert-danger" role="alert"><%= error %> </div>
    <% } %>
    <% if(success?.length) { %>
        <div class="alert alert-success" role="alert"><%= success %> </div>
    <% } %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多