主要思路

我们要考虑到的主要有:js原生对象,宿主对象(浏览器上面的)。

首先对于宿主对象

主要判断是DOM 对象 和是否是window 对象

是否是DOM对象  value.nodeType 是否存在。

是否是window 对象,value != null  && value === value.window;

对于这两种肯定不是空对象。

 if(value.nodeType || isWindow(value)){
return false;
}

对于js原生对象

是否本身返回就是false  对于自身返回false 的有   'false','null' ,' "" ','undefined','NaN', '0'  这6中情况

这些显然不能作为空对象。

然后判断是否是一个对象  使用 Object.prototype.toString.call(value) === '[object Object]';  简称为 isObject

还有一种判断,判断是否拥有 hasOwnPrototype 方法。

 if(!value || !isObject(value) || !value.hasOwnPrototype){
return false;
}

如果都不满足这些情况的话,

需要处理 是否拥有自身属性,

 for(var key in value){
if(value.hasOwnPrototype(key)){
return false;
}
}

完整代码:

 function isEmptyObject(value){
if(value.nodeType || isWindow(value)){
return false;
} if(!value || !isObject(value) || !value.hasOwnPrototype){
return false;
} for(var key in value){
if(value.hasOwnPrototype(key)){
return false;
}
}
return true;
}

js 判断是否是空对象的更多相关文章

  1. js 判断是否为空对象、空数组

    当需要判断参数是否为空时,总希望 js 能够提供原生的判断方法,可惜并没有,只能自己封装了. function isEmpty(obj) { // 检验 undefined 和 null if(!ob ...

  2. js判断是否为空和typeof的用法

    (1)typeof作用用于查看数据类型 (2)typeof用法typeof 返回值类型有number, string, boolean, function, undefined, objectPS:在 ...

  3. js判断是否为空火undefined是否给undefined加引号

    js判断是否为空为undefined如果判断的是类型则用typeof(),如果其本身就是“undefind”字符窜,则不能这样判断, 这样typeof之后是字符串类型就判断不出来了,这是需要去掉typ ...

  4. JS判断不能为空实例代码

    JS判断不能为空实例代码.分享在此. 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " ...

  5. JS判断内容为空方法总结

    HTML代码: 用户名:<input type="text" id="username"> <p style="color:red& ...

  6. js判断是否为空

    http://dushanggaolou.iteye.com/blog/1293803 1.<input type="hidden" id="key" n ...

  7. js 判断空数组,空对象!

    var attr1 = [ ]; var obj1 = { }; console.log(isEmpty(attr1)); console.log(isEmpty(obj1)); function i ...

  8. 关于如何利用原生js动态给一个空对象添加属性以及属性值

    首先,回忆一下,访问对象属性一共有两种方法:点获取法和方括号获取法.而我们最常用的就是点获取法了.但是当我们遇到需要给对象动态添加属性和属性值时,点获取法好像就不太好用了,尤其是我们不知道属性名的时候 ...

  9. JS判断数组中的对象的每一个值不能为空

    方法一:使用every()函数,此函数不怎么常用,想要了解更多请自查 //表格 evaluateData为表格的数据 <el-table id="out-table3" :d ...

随机推荐

  1. 在Windows7/8/10上,安装IIS

    (1)打开控制面板 (2)找到 程序和功能 (3)打开或者关闭Windows功能,找到Internet信息服务,确保 应用程序开发功能 .NET相关模块选中 (4)确保“静态内容”选中 (5)点击确定 ...

  2. BZOJ1337: 最小圆覆盖

    题目:求n个点的最小圆覆盖. 题解:最小圆覆盖,上模板.复杂度证明可以戳:这里 代码: #include<cstdio> #include<cstdlib> #include& ...

  3. JavaScript:Number 对象

    ylbtech-JavaScript:Number 对象 1. Number 对象返回顶部 Number 对象 Number 对象是原始数值的包装对象. 创建 Number 对象的语法: var my ...

  4. 我的Visual Studio 2013常用快捷键

    声明及广告 所有功能针对C#开发配置而写,部分功能可能由插件提供,我会尽可能标注出相应的插件名称.为行文方便,所有快捷键以大写形式表示.太常用的快捷键,如Ctrl + C, Ctrl + Z, Ctr ...

  5. swift:简单使用翻页控制器UIPageViewController

    一.小叙 UIPageViewController是一个实现图书阅读的控制器,使用它可以设置书脊位置.单双页.过渡效果等,它是通过代理的方式来实现翻页,也即上一页.下一页.最终这个UIPageView ...

  6. 第四章 logstash - type与tags属性

    参考:http://kibana.logstash.es/content/logstash/plugins/input/stdin.html 最常用法: input { stdin { tags =& ...

  7. fatal error LNK1104: 无法打开文件“libc.lib”的问题 (转)

    今天,编译程序的时候,意外遇到了一个错误,就是VS2008一直提示:fatal error LNK1104: 无法打开文件“libc.lib”,后来在网上查找了很多资料,终于知道原因了... 如果将用 ...

  8. [leetcode]Spiral Matrix II @ Python

    原题地址:https://oj.leetcode.com/problems/spiral-matrix-ii/ 题意: Given an integer n, generate a square ma ...

  9. leetcode关于数组的问题

    关于数组的几道面试题 [Leetcode] 628. 三个数的最大乘积 解题思路: 这个一开始我是没想到思路的(除了遍历),因为有正负号的问题,后来看了一下别人的思路然后自己写的,思路是这样的: 三个 ...

  10. 【转】BFC是什么

    原文:https://www.cnblogs.com/mlw1814011067/p/10397999.html ------------------------------------------- ...