一、代码
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- head>
-
- <body>
- <script>
- function isEmpty1(pbj) {
- return JSON.stringify(obj) === '{}'
- }
- function isEmpty2(obj) {
- return Object.keys(obj).length === 0;
- }
- function isEmpty3(obj) {
- return Object.getOwnPropertyNames(obj).length === 0;
- }
- function isEmpty4(obj) {
- let flag = true;
- for (let key in obj) {
- if (key) {
- flag = false; // 不是空对象
- break;
- }
- }
- return flag;
- }
-
- const key = Symbol('a')
- const obj = {
- [key]: {
- b: 1
- }
- }
- console.log(`1:${isEmpty1(obj)}`);
- console.log(`2:${isEmpty2(obj)}`);
- console.log(`3:${isEmpty3(obj)}`);
- console.log(`4:${isEmpty4(obj)}`);
- console.log(`5:${isEmpty5(obj)}`);
- function isEmpty5(obj) {
- // 也可以变量symbol类型key
- // Reflect.ownKeys()方法,返回一个包含对象自身属性和方法名的数组,包括非枚举属性、symbol类型属性、以及方法名
- // Reflect.ownKeys()方法,可以获取一个对象中所有自身的属性名和方法名,包括不能用Object.keys()方法获取的属性
- return Reflect.ownKeys(obj).length === 0;
- }
- script>
- body>
-
- html>
二、解释
在isEmpty1、isEmpty2、isEmpty3、isEmpty4、isEmpty5几个方法中,最后一个isEmpty5最为准确。
当对象的键为symbol类型时,其他几个方法无法遍历该元素,而Reflect.ownKeys()方法,可以获取一个对象中所有自身的属性名和方法名,包括symbol类型。