每日一题:判断对象是否为空

挑战介绍

本节我们来挑战一道大厂面试真题 —— 判断对象是否为空。

挑战准备

新建一个 isEmptyObject.js 文件,在文件里写一个名为 isEmptyObject 的函数,并导出这个函数,如下图所示:

图片描述

这个文件在环境初始化时会自动生成,如果发现没有自动生成就按照上述图片自己创建文件和函数,函数代码如下:

1
2
3
4
5
function isEmptyObject(obj) {
// 补充代码
}

module.exports = isEmptyObject;

挑战内容

实现一个函数,判断传入的对象是否为空。如果对象为空返回 true,否则返回 false。

不必考虑传入原始类型的情况,本题测试用例中传入的参数都是对象类型。

示例:

1
2
3
4
输入:{}
输出:true
输入:{ name: 'lin' }
输出:false

注意事项

  • 文件名、函数名不可随意更改。
  • 文件中编写的函数需要导出,否则将无法提交通过。

题解

  1. JSON:(不可靠:无限循环的时候会寄,搞了我好久)
1
return JSON.stringify(obj) === '{}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
输入:
{ a: { a: { a: { a: { ... } } } } } 无限循环下去

程序报错,错误信息如下:
TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
--- property 'a' closes the circle
at JSON.stringify (<anonymous>)
at isEmptyObject (/home/project/isEmptyObject.js:2:15)
at Object.<anonymous> [90m(/tmp/[39misEmptyObject.test.js:32:17[90m)[39m

预期结果 false

测试用例未通过
  1. ES6

    1
    return Object.keys(obj).length <= 0
  2. for… in …

    1
    2
    3
    4
    5
    6
    function isEmptyObject(obj) {
    for (let o in obj) {
    return false;
    }
    return true;
    }