对于 JavaScript 中的传统对象,使用 Object.keys
方法可以很容易地检查它是否为空:
const emptyObj = {};
console.log(Object.keys(emptyObj).length === 0); // true, i.e. "empty"
const populatedObj = { foo: 'bar' };
console.log(Object.keys(populatedObj).length === 0); // false, not empty
尽管有点多余,但如果您愿意,也可以对数组使用相同的方法:
const emptyArr = [];
console.log(Object.keys(emptyArr).length === 0); // true
const populatedArr = [1, 2, 3];
console.log(Object.keys(populatedArr).length === 0); // false
然而,ES6 方便的新数据结构 Map 和 Set 的工作方式不同。如果您尝试对它们使用 Object.keys
,您将 始终 得到一个空数组!
const populatedSet = new Set(['foo']);
console.log(Object.keys(populatedSet).length); // 0
const populatedMap = new Map([['foo', 1]]);
console.log(Object.keys(populatedMap).length); // 0
那么检查你喜欢的新 ES6 结构是否被填充的最好方法是什么?此外,是否存在某种适用于对象、数组、映射 和 集合的单一重载方法?
原文由 Zac Delventhal 发布,翻译遵循 CC BY-SA 4.0 许可协议
您使用它的
size
属性。 Maps 和 Sets 都有它( 这里 和 这里)。(旁注:WeakMaps 和 WeakSets 没有
size
或它们的“强”对应物所具有的其他几个特性,以保持它们的实现和使用它们的代码,理智。:-)它们有相似之处功能,它们提供相同的 API,但它们不是子类。)