javascript 空值_测试JavaScript中的空值

javascript 空值

本系列的第二篇文章介绍了简短但精巧的函数,讨论了测试空值的问题。 有问题的函数称为empty() 。 与同名PHP函数类似,它接受一个变量或属性,并告诉您该值是否为空。 的定义取决于所讨论的值。

PHP的empty()函数令人讨厌。 例如, 0false都将返回true ,这使许多无精打采的开发人员感到惊讶! 我们JavaScript函数更加精确地确定了哪些数据可以认为是空的:

  • undefined或为null
  • 零长度的字符串
  • 没有成员的数组
  • 没有枚举属性的对象

布尔值和数字永远不为空,无论其值如何。 这是empty()函数的代码:

function empty(data)
{
  if(typeof(data) == 'number' || typeof(data) == 'boolean')
  { 
    return false; 
  }
  if(typeof(data) == 'undefined' || data === null)
  {
    return true; 
  }
  if(typeof(data.length) != 'undefined')
  {
    return data.length == 0;
  }
  var count = 0;
  for(var i in data)
  {
    if(data.hasOwnProperty(i))
    {
      count ++;
    }
  }
  return count == 0;
}

功能如何运作

您可以看到有四个条件用于测试不同的数据类型。 其中的第一个处理布尔值和数字,并且始终返回false 。 可以说这个条件是不必要的,因为,好吧,不要传递布尔值和数字! 但是提供这种灵活性意味着您可以传递任意数据。 第二个条件针对undefinednull测试值。 如以下示例所示,这对于设置可选函数参数的默认值特别有用。

function doSomething(foo, bar)
{
  if(empty(bar))
  {
    bar = 'default value';
  }
}

尽管null显然与undefined ,但就许多意图和目的而言,它们等同于同一件事(即,这段数据没有想要的值)。 例如,如果使用对象语法查询Web存储对象,则undefined的值将是undefined ,但getItem()方法将返回null

empty()的第三个条件处理具有length属性的任何内容。 这将检测到没有成员的空字符串和数组。 我确实考虑了一种额外条件,即检查是否为空或只有空格的字符串。 该测试如下所示。

if(typeof(data.length) != 'undefined')
{
  if(/^[\s]*$/.test(data.toString()))
  {
    return true;
  }
  return data.length == 0;
}

我决定不包括之前的检查,因为这会引起歧义。 是否只将空格字符串视为空是一个问题,取决于特定的应用程序。 取而代之的是,我选择使函数尽可能清晰(毕竟我们不是在编写PHP)。

最终条件处理对象,遍历对象并计算其可枚举成员。 如果该计数为零,则该对象被视为空。

忽略无关紧要的

由于位于末尾,因此最终条件可以处理通过条件进行的其他任何事情,包括函数,正则表达式,元素和文档。 函数和正则表达式将被视为空,因为它们通常没有可枚举的属性。 元素和文档不会为空,因为它们具有许多属性。

这种歧义可能值得避免,但是在某些时候您必须问自己:“真的值得吗?” 考虑一下您可能要测试的数据类型。 通常是简单变量,数组,字典,函数参数,表单值,Ajax响应,属性和文本节点。 它不太可能是函数,正则表达式或DOM子树。 empty()函数在精确评估与不浪费时间测试每种可能的可能性之间走出一条细线。

翻译自: https://www.sitepoint.com/testing-for-empty-values/

javascript 空值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值