如何判断一个变量是空对象、空数组还是空字符串?

Cha*_*ika 3 javascript is-empty

我有一个对象,其键可以具有可以是对象、字符串或数组的值。

const obj = {
  key1: 'asdf',
  key2: {},
  key3: ['a','b','c'],
  key4: [],
  key5: '',
}
Run Code Online (Sandbox Code Playgroud)

我必须过滤所有空的键,即空对象、空数组或空字符串。

typeof除了根据键编写条件然后检查 null之外,还有其他方法吗?

mmd*_*dts 5

只需使用 Object.keys()

if (Object.keys(something).length) console.log("Not empty");
Run Code Online (Sandbox Code Playgroud)

这适用于所有字符串、数组,当然还有对象。

您可以查看 Object.keys 文档以获取更多详细信息,特别是示例部分和非对象强制部分,其中指出:

// simple array const arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// array-like object const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']
Run Code Online (Sandbox Code Playgroud)

在 ES5 中,如果该方法的参数不是对象(原语),那么它将导致 TypeError。

从 ES2015 开始,非对象参数将被强制为对象。

// In ES5 Object.keys('foo');  // TypeError: "foo" is not an object

// In ES2015+ Object.keys('foo');  // ["0", "1", "2"]
Run Code Online (Sandbox Code Playgroud)

  • 但不适用于数字 (2认同)