Javascript查找对象是否至少具有一个未定义的属性

时间:2019-09-17 13:04:12

标签: javascript

我想知道这两种方法之间,哪一种会更快,为什么?

使用 Object.values lodash

isOneObjectPropertyNonUndefined(object) {
    let isObjectEmpty = true;
    if (!lodash.isEmpty(object)) {
      const objectValues = Object.values(object);
      for (let index in objectValues) {
        if (objectValues[index] !== undefined) {
          isObjectEmpty = false;
          break;
        }
      }
    }
  return isObjectEmpty;
}

使用 JSON.stringify

isOneObjectPropertyNonUndefined(object) {
    return JSON.stringify(object) === '{}';
}

在JSON.stringify之后,可能是一些C / C ++代码。如果是正确的事实,可以假设它更快吗?

EDIT :似乎JSON.stringify使用jsperf更快。 https://jsperf.com/test-one-object-field-non-undefined/1 即使仅通过一个非常简单的输入进行了测试。

1 个答案:

答案 0 :(得分:3)

两者似乎都比必要的复杂:

isOneObjectPropertyNonUndefined(object) {
    return Object.values(object).some(v => v !== undefined));
}

如果对象具有至少一个其值不是true的属性,则返回undefined,如果该对象没有属性或者它们都具有值false,则返回undefined

这用于“自有”属性(就像JSON.stringify一样。)