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中判断空对象的更多相关文章

  1. js中判断空及获取当前服务的根路径

    function isValue(o) { return (this.isObject(o) || this.isString(o) || this.isNumber(o) || this.isBoo ...

  2. Javascript判断空对象

    最近在项目开发中判断空对象时,用了“!”运算符,结果程序出现bug,找了好久才找到原因. 其实自己范了一些低级错误,现在把自己经验总结一下: 在JavaScript中,任意JavaScript的值都可 ...

  3. js判断空对象

    最近项目遇到判断空对象的一个问题,查阅相关资料再进行总结一下. 判断空对象不比判断空字符串之类的,因为空对象也是一个对象,需要单独分配内存,而不是像字符串那样为空时就是大锅饭,大家都相等,如下代码: ...

  4. JS中的event 对象详解

    JS中的event 对象详解   JS的event对象 Event属性和方法:1. type:事件的类型,如onlick中的click:2. srcElement/target:事件源,就是发生事件的 ...

  5. js中两个对象的比较

    代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...

  6. MVC中处理Json和JS中处理Json对象

    MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...

  7. js中的json对象详细介绍

    JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...

  8. JavaScript -- 时光流逝(五):js中的 Date 对象的方法

    JavaScript -- 知识点回顾篇(五):js中的 Date 对象的方法 Date 对象: 用于处理日期和时间. 1. Date对象的方法 <script type="text/ ...

  9. JavaScript -- 时光流逝(四):js中的 Math 对象的属性和方法

    JavaScript -- 知识点回顾篇(四):js中的 Math 对象的属性和方法 1. Math 对象的属性 (1) E :返回算术常量 e,即自然对数的底数(约等于2.718). (2) LN2 ...

随机推荐

  1. 总结:WPF中ResourceDictionary资源文件的查找和遍历方法

    原文:总结:WPF中ResourceDictionary资源文件的查找和遍历方法 一.查找包含制定关键字的资源 ResourceDictionary GetThemeDictionary()     ...

  2. SQL 查询表外键_T-Sql 2016——级联删除外键查询

    SELECT fk.name AS foreign_key_name, oSub.name AS table_name, SubCol.name AS table_column, oMain.name ...

  3. 【译】itertools

    1.Itertools模块迭代器的种类 1.1  无限迭代器: 迭代器 参数 结果 示例 count() start, [step] start, start+step, start+2*step, ...

  4. Apache Kafka是数据库吗?

    最近思路有些枯竭,找些务虚的话题来凑.本文内容完全来自于Martin Kelppmann在2019年Kafka伦敦峰会上的演讲.顺便提一句,Kelppmann是<Designing Data-I ...

  5. mysql 查询当天数据

    查询当天数据 select * from tab where FROM_UNIXTIME(fabutime, '%Y%m%d') = 20121217;   mysql TO_DAYS(date) 函 ...

  6. MongoDB分片,唯一索引与upsert

    前言 分片,唯一索引和upsert,表面上看似没有直接联系的几个东西,到底存在怎样的瓜葛呢? 分片 为了保持水平扩展的有效性,分片功能必须保证各个片之间没有直接关联,不需要与其他分片交互就可以独立做出 ...

  7. springboot2.1.3 配置前后端跨域问题

    很简单,创建一个配置类即可,如下: package com.app.gateway.common.config; import org.springframework.context.annotati ...

  8. Linux下设置Nginx开机自启

    1.本地环境 [root@dev ~]#cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 2.在/etc/init.d创建ngi ...

  9. Unexpected EOF in archive 或者 rmtlseek not stopped at a record boundary

    多半都是文件在传输.复制的时候,发生了损坏: 尽量cp不要用mv 其次,注意文件的大小:

  10. Gitlab修改IP后,配置更改

    gitlab 服务器在修改了IP地址之后,面对需要修改配置的问题,否则每个项目的 git网址显示是老IP.从网上搜索了不少修改教程,发现基本都是修改 /opt/gitlab/embedded/serv ...