【问题标题】:How to prevent javascript if statement to evaluate 0 as an empty string?如何防止javascript if语句将0评估​​为空字符串?
【发布时间】:2018-12-12 14:56:12
【问题描述】:

我有一个 js 对象,它的数据包含数字。其中一些可以是0。在这种情况下,if 语句会将这些值评估为空字符串。这是一个例子:

var dataObj = {
  "one": 13,
  "two": 0,
  "three": 3
}

$.each(dataObj, function (j, k) {
  if(k){
    console.log('Column: '+k);
  }else{
    console.log('Empty');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

我想知道如何防止这种情况发生?有没有办法检查值是否为空但同时不将0 视为空值?

【问题讨论】:

  • if (k || k === 0) 怎么样?
  • 这行得通,但这是一个好习惯吗?
  • 为什么不呢?语言规范保证它以特定方式运行。
  • 所以不要做一个真实的检查?检查空字符串? if (k != '')
  • 未评估为空字符串。除了空字符串之外,还有许多虚假值,0 就是其中之一

标签: javascript jquery if-statement operators


【解决方案1】:

您可以将条件更改为k || k===0,这意味着(据我所知)它将接受not-undefined、not-null、not-empty 和zero int value 作为true。

如果我能做些什么来改进答案,请发表评论。

别忘了查看我的 sn-p

祝你有美好的一天..

var dataObj = {
  "one": 13,
  "two": 0,
  "three": 3,
  "four": null,
  "five": ''
}

$.each(dataObj, function (j, k) {
  // use 'or' operator
  if(k || k===0){
    console.log('Column: '+k);
  }else{
    console.log('Empty');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【讨论】:

    【解决方案2】:

    您可以使用逻辑运算符 (||) 添加 k==0 作为条件的一部分,当值为 0 时,该条件将通过条件。

    试试

    if(k || k == 0){
    

    var dataObj = {
      "one": 13,
      "two": 0,
      "three": 3
    }
    
    $.each(dataObj, function (j, k) {
      if(k || k == 0){
        console.log('Column: '+k);
      }else{
        console.log('Empty');
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    【讨论】:

    • 抱歉,这是之前答案的副本(无论如何都应该是评论,因为这是一个关于良好实践的问题,而不是真正解决问题的问题)
    • @ChrisG,为什么评论只在一个答案下而不是在另一个答案下.....投票结束比发表评论更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2017-04-08
    • 2012-09-04
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多