JavaScript判断一个对象是否为空
背景
JavaScript 的基本类型(number
, string
, boolean
, null
, undefined
, symbol
)在变量中存储的是值本身。两个基本类型在进行比较时,会比较值
let apple = 1; // 变量 apple 中存放的就是 1
let banana = 1;
apple === banana; // true
我们在小学二年级学过,JavaScript 中的Object
是引用类型,变量中存储的是对象在内存空间中的地址引用。我们无法比较两个对象,否则我们将得到一个预期之外的结果
let tree = {}; // 变量 tree 中存放的实际上是 {} 在内存中的地址,如: 0x0001
tree == {}; // false
tree === {}; // false
那么我们该如何判断一个对象是空对象{}
呢?
0. 说明
测试用例
以下是isNull
函数的测试用例
test1 = 1;
test2 = {};
test3 = {a:1,b:2};
输入校验
为了校验参数输入,我们通过调用Object.prototype.toString()
来判断参数是否为对象
Object.prototype.toString.call(obj)!=='[object Object]'
1. for in 遍历对象的 keys
MDN: for...in
语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性
function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
for(keys in obj) {
return false
}
return true
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_isNull(test3); // false
2. 判断 Object.keys() 的长度
MDN: Object.keys()
方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用for...in
循环遍历该对象时返回的顺序一致
function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
return Object.keys(obj).length === 0
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_isNull(test3); // false
3. Object.getOwnPropertyNames()
MDN: Object.getOwnPropertyNames()
方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组
function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
return Object.getOwnPropertyNames(obj).length === 0
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_isNull(test3); // false
4. JSON.stringify()
MDN: JSON.stringify()
方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串
先将对象转换成 JSON 字符串,然后比较 JSON 字符串与{}
function _isNull(obj) {
if(Object.prototype.toString.call(obj)!=='[object Object]') {
return 'Type Error'
}
return JSON.stringify(obj) === '{}'
}
_isNull(test1); // "Type Error"
_isNull(test2); // true
_isNull(test3); // false
总结
本文简单说明了 JavaScript 的基本类型和引用类型的区别,并介绍了四种判断对象是否为空的方法。
JavaScript判断一个对象是否为空的更多相关文章
- JavaScript 判断一个对象{}是否为空对象的简单方法
第一种: function isEmptyObject(obj) { for (var key in obj) { //返回false,不为空对象 return false; } return tru ...
- JS心得——判断一个对象是否为空
判断一个对象是否为空对象,本文给出三种判断方法: 最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 2.通过JSON自带的. ...
- 使用js判断一个对象是否为空 比如 obj={}
今天使用到js判断一个对象是否为空,js没有封装好的方法,这里最好的办法就是使用jquery里面的封装好的方法 $.isEmptyObject(obj)
- JS——判断一个对象是否为空
判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 2.通过JSON自带 ...
- js判断一个对象{}是否为空对象,没有任何属性
// js如何判断一个对象{}是否为空对象,没有任何属性 if (typeof model.rows === "object" && !(model.rows in ...
- JS如何判断一个对象是否为空、是否有某个属性
一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){ for (let key in obj){ return ...
- [转]JS如何判断一个对象是否为空、是否有某个属性
原文地址:https://www.cnblogs.com/crackedlove/p/10039105.html 一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 ...
- js/jquery判断一个对象是否为空
一.js判断一个对象是否为空对象 1)通过JSON自带的.stringify方法来判断 //JSON自带的stringify方法,将json转成json字符串 var c = {}; if(JSON. ...
- 判断一个对象是否为空?怎么得到一个对象的第几个键名(key)?
var obj = {"微信":[],"qq":[]} console.log( Object.keys(obj) ) // ["微信",& ...
随机推荐
- 基于 maven 的ssm 框架搭建
1.新建一个 maven 工程, war 包 2.引入 pom 文件(springmvc+spring+mybatis) 3.引入配置文件 4.引入页面,编写 contorller 层测试 5.编写查 ...
- python学习笔记(15)pymysql数据库操作
pymysql数据库操作 1.什么是PyMySQL 为了使python连接上数据库,你需要一个驱动,这个驱动是用于与数据库交互的库. PyMySQL : 这是一个使Python连接到MySQL的库,它 ...
- Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】
Excel-DNA项目中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在Class1.vb这个默认文件中. 大家可以在Visual Studi ...
- 算法之匹配:KMP
public static int getIndexOf(String str1, String str2) { if (str1 == null || str2 == null || str1.le ...
- [LC] 398. Random Pick Index
Given an array of integers with possible duplicates, randomly output the index of a given target num ...
- PLL到底是个啥么东西呢?
——————————————————更新于20180826———————————————————————————— PLL:完成两个电信号的相位同步的自闭环控制系统叫锁相环.用电压控制延时,用到了VC ...
- [LC] 28. Implement strStr()
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- 设置Fiddler来抓取Android接口数据
1.下载安装fiddler,安装包可自行百度.安装完成打开fiddler 2.将Fiddler设置远程访问PC 选择Fiddler->Tools->Fiddler Option 3.选择C ...
- LibreOJ β Round #2」贪心只能过样例
题目友链:https://loj.ac/problem/515 话说这题蛮简单,bitset暴力直接过. 话不多说,上代码! #include <bits/stdc++.h> using ...
- SpringMVC学习笔记五:HandlerExceptionResolver异常处理
继承HandlerExceptionResolver自定义异常处理器 控制器ExceptionController.java package com.orange.controller; import ...