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 的基本类型和引用类型的区别,并介绍了四种判断对象是否为空的方法。在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中,判断一个对象是否为空对象有多种方法。以下是几种常见的方法: 1. 将对象转换成字符串,再判断是否等于"{}"。可以使用JSON.stringify()方法将对象转换成字符串,然后判断该字符串是否等于"{}"。例如: ``` let obj = {}; console.log(JSON.stringify(obj) === "{}"); // 返回true ``` 2. 使用for-in循环遍历对象的属性,如果能找到任何一个属性,就说明该对象不为。例如: ``` let obj = {}; let isEmpty = function() { for (let key in obj) { return false; } return true; }; console.log(isEmpty()); // 返回true ``` 3. 使用jQuery的isEmptyObject()方法判断对象是否为空。例如: ``` let obj = {}; console.log($.isEmptyObject(obj)); // 返回true ``` 4. 使用Object对象的getOwnPropertyNames()方法获取对象的属性名,将属性名存储到一个数组中,然后判断数组的长度是否为0来判断对象是否为空。例如: ``` let obj = {}; let arr = Object.getOwnPropertyNames(obj); console.log(arr.length === 0); // 返回true ``` 5. 使用ES6的Object.keys()方法获取对象的所有属性名,将属性名存储到一个数组中,然后判断数组的长度是否为0来判断对象是否为空。例如: ``` let obj = {}; let keys = Object.keys(obj); console.log(keys.length === 0); // 返回true ``` 以上是几种判断对象是否为空对象的常见方法。根据具体的实际情况,可以选择适合自己需求的方法来判断一个对象是否为空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值