原生javascript中检查对象是否为空示例实现

目录
  • 什么是原生 JavaScript
  • A.在较新的浏览器中检查空对象
    • 通过检查 constructor 解决误报
    • 对其他值进行空检查
  • B.旧版本浏览器中的空对象检查
    • 使用 JavaScript 检查空对象
    • 其它类型的构造函数也能正常判断
  • 使用外部库检查空对象
  • 原生 VS 库

下面的代码片段,用于检查对象是否为空。 对于较新的浏览器,你可以使用 ES6 的 “Object.keys”。对于较旧的浏览器,可以安装Lodash库并使用其“ isEmpty”方法。

const empty = {};
/* -------------------------
  较新的浏览器
----------------------------*/
Object.keys(empty).length === 0 && empty.constructor === Object
// true
/* -------------------------
  老版本的浏览器可以使用 Lodash
----------------------------*/
_.isEmpty(empty)
// true

什么是原生 JavaScript

原生 JavaScript 指的是不使用框架或库。 它只是常规的普通 JavaScript,没有使用LodashjQuery之类的库。

A.在较新的浏览器中检查空对象

我们可以使用内置的Object.keys方法检查空对象。

const empty = {};
Object.keys(empty).length === 0 && empty.constructor === object;

为什么我们需要额外的constructor 检查?

你可能想知道为什么我们需要对 constructor 进行检查。 它是为了覆盖包装器实例。在JavaScript中,我们有9个内置的构造函数。

new Object();
new String();
new Number();
new Boolean();
new Array();
new RegExp();
new Function();
new Date();

这里,我们可以使用new Object()创建一个空对象。

const obj = new Object();
Object.keys(obj).length === 0; // true

因此,仅使用Object.keys,当对象为空时,它的确会返回true。 但是,当我们使用其他构造函数创建新的对象实例时会发生什么。

function badEmptyCheck(value) {
  return Object.keys(value).length === 0;
}
badEmptyCheck(new String());    // true
badEmptyCheck(new Number());    // true
badEmptyCheck(new Boolean());   // true
badEmptyCheck(new Array());     // true
badEmptyCheck(new RegExp());    // true
badEmptyCheck(new Function());  // true
badEmptyCheck(new Date());      // true 

通过检查 constructor 解决误报

通过添加构造函数检查来纠正这个错误。

function goodEmptyCheck(value) {
  Object.keys(value).length === 0
    && value.constructor === Object; //  constructor check
}
goodEmptyCheck(new String());   // false
goodEmptyCheck(new Number());   // false
goodEmptyCheck(new Boolean());  // false
goodEmptyCheck(new Array());    // false
goodEmptyCheck(new RegExp());   // false
goodEmptyCheck(new Function()); // false
goodEmptyCheck(new Date());     // false 

对其他值进行空检查

接着,我们用一些值上测试我们的方法,看看我们会得到了什么

function isEmptyObject(value) {
  return Object.keys(value).length === 0 && value.constructor === Object;
}

到目前为止看起来不错,对于非对象它返回 false

isEmptyObject(100)  // false
isEmptyObject(true) // false
isEmptyObject([])   // false

但是要当心! 下面这些值会引发错误。

// TypeError: Cannot covert undefined or null to object
isEmptyObject(undefined);
isEmptyObject(null);

改进对nullundefined的空检查

如果不想让它抛出TypeError,可以添加额外的检查

function isEmptyObject(value) {
  return value && Object.keys(value).length === 0 && value.constructor === Object;
}

B.旧版本浏览器中的空对象检查

如果你需要支持较旧的浏览器怎么办? 大家都知道,当说旧的浏览器时,指的是 IE,我们有2个选择,使用原生或利用库。

使用 JavaScript 检查空对象

原生的 JS 并不那么简洁,但判断用来空对象是没问题的。

function isObjectEmpty(value) {
  return (
    Object.prototype.toString.call(value) === '[object Object]' && JSON.stringify(value) === '{}'
  );
}

对于对象,它返回true

isObjectEmpty({});           // true
isObjectEmpty(new Object()); // true 

其它类型的构造函数也能正常判断

isObjectEmpty(new String());   // false
isObjectEmpty(new Number());   // false
isObjectEmpty(new Boolean());  // false
isObjectEmpty(new Array());    // false
isObjectEmpty(new RegExp());   // false
isObjectEmpty(new Function()); // false
isObjectEmpty(new Date());     // false 

传入 null 和 undefined 也不会报 TypeError

isObjectEmpty(null);      // false
isObjectEmpty(undefined); // false

使用外部库检查空对象

有大量的外部库可以用来检查空对象。而且大多数都对旧浏览器有很好的支持

Lodash
_.isEmpty({});
// true
Underscore
_.isEmpty({});
// true
jQuery
jQuery.isEmptyObject({});
// true

原生 VS 库

答案是看情况而定!我非常喜欢尽可能地简化程序,因为我不喜欢外部库的开销。另外,对于较小的应用程序,我懒得设置外部库。

但如果你的应用程序已经安装了一个外部库,那么就继续使用它。你会比任何人都更了解你的应用程序。所以选择最适合你情况的方法。

以上就是原生javascript中检查对象是否为空示例实现的详细内容,更多关于javascript中检查对象是否为空的资料请关注我们其它相关文章!

(0)

相关推荐

  • JS实现判断对象是否为空对象的5种方法

    1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{}"); alert(b);//true 2.for in 循环判断 var obj = {}; var b = function() { for(var key in obj) { return false; } return true; } alert(b());//true 3.jquery的

  • JavaScript 判断一个对象{}是否为空对象的简单方法

    做项目时遇到一个问题,判断一个对象是否为空对象,发现这样判断可以,上代码: 1. 代码1: var a = {}; if(!a){ console.log(1);} else if(a == null) { console.log(2);} else { console.log(3);} 结果为:3 2. 代码2: var b = {}; if(b == {}){ console.log(4);} if(b == '{}') { console.log(5);} if(typeof(b) ==

  • JS/Jquery判断对象为空的方法

    发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是否为空,等价于检查对象中有没有键值对.写成代码,形如: if (isEmptyObject(obj)) { // obj is empty } else { // not empty } 至于 isEmptyObject 的实现,jQuery 中有一个很有想法的方式,请看代码: function i

  • js中判断对象是否为空的三种实现方法

    在写js脚本的时候经常遇到对象为空或者不是对象的情况,出现这种情况我们可以用if去判断它,然后去执行相应的处理方法,具体判断他们的方法有以下几种: 1.if   (typeOf(x)   ==   "undefined") 2.if   (typeOf(x)   !=   "object") 3.if(!x) 其中第三种是最简单的方法,但是第三种就不能用if(x)这种互斥的方法去判断,只能在对象前面加! java里面!x为true的时候x肯定为false了,但是这里

  • 原生javascript中检查对象是否为空示例实现

    目录 什么是原生 JavaScript A.在较新的浏览器中检查空对象 通过检查 constructor 解决误报 对其他值进行空检查 B.旧版本浏览器中的空对象检查 使用 JavaScript 检查空对象 其它类型的构造函数也能正常判断 使用外部库检查空对象 原生 VS 库 下面的代码片段,用于检查对象是否为空. 对于较新的浏览器,你可以使用 ES6 的 "Object.keys".对于较旧的浏览器,可以安装Lodash库并使用其" isEmpty"方法. con

  • Javascript中判断对象是否为空

    发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是否为空,等价于检查对象中有没有键值对.写成代码,形如: if (isEmptyObject(obj)) { // obj is empty } else { // not empty } 至于 isEmptyObject 的实现,jQuery 中有一个很有想法的方式,请看代码: function i

  • 原生javascript实现的ajax异步封装功能示例

    本文实例讲述了原生javascript实现的ajax异步封装功能.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"&g

  • 原生javascript实现类似vue的数据绑定功能示例【观察者模式】

    本文实例讲述了原生javascript实现类似vue的数据绑定功能.分享给大家供大家参考,具体如下: 观察者模式 let observer = { /*订阅功能*/ addSubscriber: function (cb) { this.subscribers.push(cb); }, /*退订功能*/ removerSubscriber: function (cb) { let index = this.subscribers.indexOf(cb); this.subscribers.spl

  • 原生javascript实现的全屏滚动功能示例

    本文实例讲述了原生javascript实现的全屏滚动功能.分享给大家供大家参考,具体如下: 原理: 1. 计算当前浏览器屏幕高度,每次翻页显示的内容高度即为屏幕高度 2. 对鼠标滚轮事件进行监听,注意滚轮事件的浏览器兼容问题. 废话不多说,直接上代码 html代码: <div id="wrap"> <div id="main" style="top: 0;"> <div class="content num

  • 原生JavaScript创建不可变对象的方法简单示例

    本文实例讲述了原生JavaScript创建不可变对象的方法.分享给大家供大家参考,具体如下: Javascript是一种灵活的语言,你可以重新定义任何东西,但是当项目变得复杂时,我们会发现可变数据结构的问题.随着JavaScript的最新版本的发布这种情况发生了改变.现在可以创建不可变的对象了.本文介绍如何用三种不同的方法来做. 对象的不变性意味着我们不希望对象在创建后即以任何方式更改(将它们设置为只读类型). 假设我们需要定义一个 car 对象,并在整个项目中使用它的属性来执行操作.我们不能允

  • JavaScript中如何判断对象是否为空的方法

    目录 Object.keys() 示例 为什么需要额外判断对象的构造函数呢? 另一种边界情况 总结 在自己的日常开发中,一般使用Object.keys()来判断对象是否为空: const obj = {}; Object.keys(obj).length === 0 // true 则为空对象 而在一篇文章中却是如此判断: const obj = {}; Object.keys(obj).length === 0 && obj.constructor === Object 为什么还要额外判

  • 原生JavaScript之es6中Class的用法分析

    本文实例讲述了原生JavaScript之es6中Class的用法.分享给大家供大家参考,具体如下: es6class写法 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', ' + this.y + ')'; } } es5写法 function Point(x, y) { this.x = x; this.y = y; } Point.prototyp

  • JavaScript入门之对象与JSON详解

    JavaScript对象与传统的面向对象中的对象几乎没有相似之处,传统的面向对象语言中,创建一个对象必须先有对象的模板:类,类中定义了对象的属性和操作这些属性的方法.通过实例化来构筑一个对象,然后使用对象间的协作来完成一项功能,通过功能的集合来完成整个工程.而Javascript中是没有类的概念的,借助JavaScript的动态性,我们完全可以创建一个空的对象(而不是类),通过像对象动态的添加属性来完善对象的功能. JSON是JavaScript中对象的字面量,是对象的表示方法,通过使用JSON

  • javascript中的对象创建 实例附注释

    javascript中的对象创建声明: var obj = {}; 或者 var obj = new Object(); 为对象加入属性,方法: //=====第一种写法==================================== obj.name = '小明'; //为对象加属性 obj.updateName = function(name){//为对象定义updateName方法 this.name = name; } alert(obj.name); obj.updateNam

随机推荐