JS中判断空对象
js 判断空对象
首先要区分一个概念,空对象和空引用:
空对象:{}是指不含任何属性的对象,当然对象属性包括字面值和函数。
空引用:obj=null 是指变量值指向null变量,当然在js默认不赋值的情况下,一个变量为undefined.
空对象的讨论:
原型:
原型上包括了继承属性,有可以枚举的属性和不可以枚举的属性。默认对象都继承了Object。
自身:
自身属性同样包括了可枚举的属性和不可枚举的属性。
限定场景:
后台JSON对象:
判断后台传来的对象为空对象,此时,该对象一般为JSON对象,此时可以忽略原型上的属性判断,因为JSON对象也是一个普通对象,不过它的结构有时候比较特殊,该对象默认基础Objcet,然而,作为一个从后台传来的对象,后台无法实现原型继承、不可枚举这种特性,这个时候,只需要关注对象自身可枚举属性时是否为空即可。
解决方案:
方案 1:
var data = {};
var b = JSON.stringify(data) == "{}";
alert(b); //true
方案 2:
Object.keys(obj)返回不包括原型上的可枚举属性,即自身的可枚举属性
var data = {};
var b = Object.keys(data).length === 0;
方案 2 模拟实现:
for in语法遍历原型及自身上的可枚举属性,需要结合hasOwnProperty去除原型上的可枚举属性
var data = {};
function isEmptyObj(obj) {
for (var key in obj) {
if ({}.hasOwnProperty.call(obj, key)) return false;
}
return true;
}
var b=isEmptyObj(data);
console.log(b);
方案 3:
Objcet.getOwnPropertyNames(obj)返回不包括原型上的所有自身属性(包括不可枚举的属性)
var data = {};
var b=Object.getOwnPropertyNames(data)===0;
console.log(b);
JS中判断空对象的更多相关文章
- js中判断空及获取当前服务的根路径
function isValue(o) { return (this.isObject(o) || this.isString(o) || this.isNumber(o) || this.isBoo ...
- Javascript判断空对象
最近在项目开发中判断空对象时,用了“!”运算符,结果程序出现bug,找了好久才找到原因. 其实自己范了一些低级错误,现在把自己经验总结一下: 在JavaScript中,任意JavaScript的值都可 ...
- js判断空对象
最近项目遇到判断空对象的一个问题,查阅相关资料再进行总结一下. 判断空对象不比判断空字符串之类的,因为空对象也是一个对象,需要单独分配内存,而不是像字符串那样为空时就是大锅饭,大家都相等,如下代码: ...
- JS中的event 对象详解
JS中的event 对象详解 JS的event对象 Event属性和方法:1. type:事件的类型,如onlick中的click:2. srcElement/target:事件源,就是发生事件的 ...
- js中两个对象的比较
代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...
- MVC中处理Json和JS中处理Json对象
MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...
- js中的json对象详细介绍
JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...
- JavaScript -- 时光流逝(五):js中的 Date 对象的方法
JavaScript -- 知识点回顾篇(五):js中的 Date 对象的方法 Date 对象: 用于处理日期和时间. 1. Date对象的方法 <script type="text/ ...
- JavaScript -- 时光流逝(四):js中的 Math 对象的属性和方法
JavaScript -- 知识点回顾篇(四):js中的 Math 对象的属性和方法 1. Math 对象的属性 (1) E :返回算术常量 e,即自然对数的底数(约等于2.718). (2) LN2 ...
随机推荐
- Echarts 学习系列(1)-5分钟上手ECharts
目录 写在前面 下载Echarts和主题 绘制一个简单的图表 写在前面 最近,在做某个项目的时候.需要使用的可视化的图表显数据.最后,选择了百度的Echarts. 下载Echarts和主题 1.获取E ...
- ajax 执行成功以后返回的数据走的是error方法而不是success方法的问题
今天在一个功能的时候发现写的ajax的方法执行后台代码成功后返回前台时执行的是error方法而不是success方法,代码如下 jQuery('#form').ajaxSubmit({ type: & ...
- 类再生(合成、继承、final)
类再生 有两种方法达到代码复用的效果:合成.继承. 合成的语法 合成就是形成对象,把复用的代码置入对象句柄. 在类内字段使用基本数据会初始化为零,但对象句柄会初始化为null.在下面的程序中若没有ne ...
- 服务器收不到支付宝notify_url异步回调请求的问题 支付宝notify 异步通知与https的问题
需确认页面是http还是https,如果是https,那么需要安装ssl证书,证书要求有如下:要求“正规的证书机构签发,不支持自签名”. 然后赶快,按照支付宝,宝爷的要求,去自检了一下自家的证书,下面 ...
- 创建你自己定制的vuejs plugin扩展app的功能
什么是vuejs plugin插件 vuejs plugin插件是一个向你的app注入新的全局功能的强大但又简约的方式.从概念上来说,vue plugin非常简单,它就是一个包含了install方法的 ...
- kvm第一章--概念
- echarts 3D地球实现自动旋转
素材已上传至https://gitee.com/i1520/echarts3DEarth.git https://github.com/i1520/echarts3DEarth 1.引入js文 ...
- JavaScript 获取页面元素
一.根据 id 获取元素 语法格式: document.getElementById(id); Demo: var main = document.getElementById('main'); co ...
- linux如何执行定时任务
前言:最近在做一个前端监控系统,用到分表分库的功能,由于代码上无法做到实时新建表,所以只能够曲线救国,使用linux系统的定时任务来完成. ============================== ...
- 自动化渗透测试工具(Cobalt Strike)3.1 最新破解版
自动化渗透测试工具(Cobalt Strike)3.1 最新破解版[附使用教程] Cobalt Strike是一款专业的自动化渗透测试工具,它是图形化.可视化的,图形界面非常友好,一键傻瓜化使用MSF ...