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 ...
随机推荐
- 总结:WPF中ResourceDictionary资源文件的查找和遍历方法
原文:总结:WPF中ResourceDictionary资源文件的查找和遍历方法 一.查找包含制定关键字的资源 ResourceDictionary GetThemeDictionary() ...
- SQL 查询表外键_T-Sql 2016——级联删除外键查询
SELECT fk.name AS foreign_key_name, oSub.name AS table_name, SubCol.name AS table_column, oMain.name ...
- 【译】itertools
1.Itertools模块迭代器的种类 1.1 无限迭代器: 迭代器 参数 结果 示例 count() start, [step] start, start+step, start+2*step, ...
- Apache Kafka是数据库吗?
最近思路有些枯竭,找些务虚的话题来凑.本文内容完全来自于Martin Kelppmann在2019年Kafka伦敦峰会上的演讲.顺便提一句,Kelppmann是<Designing Data-I ...
- mysql 查询当天数据
查询当天数据 select * from tab where FROM_UNIXTIME(fabutime, '%Y%m%d') = 20121217; mysql TO_DAYS(date) 函 ...
- MongoDB分片,唯一索引与upsert
前言 分片,唯一索引和upsert,表面上看似没有直接联系的几个东西,到底存在怎样的瓜葛呢? 分片 为了保持水平扩展的有效性,分片功能必须保证各个片之间没有直接关联,不需要与其他分片交互就可以独立做出 ...
- springboot2.1.3 配置前后端跨域问题
很简单,创建一个配置类即可,如下: package com.app.gateway.common.config; import org.springframework.context.annotati ...
- Linux下设置Nginx开机自启
1.本地环境 [root@dev ~]#cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 2.在/etc/init.d创建ngi ...
- Unexpected EOF in archive 或者 rmtlseek not stopped at a record boundary
多半都是文件在传输.复制的时候,发生了损坏: 尽量cp不要用mv 其次,注意文件的大小:
- Gitlab修改IP后,配置更改
gitlab 服务器在修改了IP地址之后,面对需要修改配置的问题,否则每个项目的 git网址显示是老IP.从网上搜索了不少修改教程,发现基本都是修改 /opt/gitlab/embedded/serv ...