如何检查JavaScript中的对象属性是否未定义?


当前回答

读到这里,我很惊讶我没有看到这一点。我已经找到了多种算法可以解决这个问题。

从未定义

如果从未定义对象的值,那么如果将其定义为null或undefined,则将无法返回true。如果您希望为设置为undefined的值返回true,这很有用

if(obj.prop === void 0) console.log("The value has never been defined");

定义为未定义或从未定义

如果您希望使用undefined值定义的值或从未定义的值的结果为true,则可以简单地使用==undefineed

if(obj.prop === undefined) console.log("The value is defined as undefined, or never defined");

定义为错误值、未定义、空或从未定义。

通常,人们要求我提供一种算法,以确定某个值是否为假值、未定义值或空值。以下工作。

if(obj.prop == false || obj.prop === null || obj.prop === undefined) {
    console.log("The value is falsy, null, or undefined");
}

其他回答

我没有看到(希望我没有错过)任何人在物业前检查该对象。因此,这是最短和最有效的(虽然不一定是最清楚的):

if (obj && obj.prop) {
  // Do something;
}

如果obj或obj.prop为undefined、null或“falsy”,If语句将不执行代码块。这通常是大多数代码块语句(在JavaScript中)所需的行为。

更新:(2021 7月2日)

最新版本的JavaScript为可选链接:?。

这可能是检查对象财产是否存在的最明确、最有效的方法。

裁判:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

与void 0进行比较,以获得简洁性。

if (foo !== void 0)

它不像(typeoffoo!=='undefined')那样冗长

也可以使用代理。它可以处理嵌套调用,但需要额外检查一次:

function resolveUnknownProps(obj, resolveKey) {
  const handler = {
    get(target, key) {
      if (
        target[key] !== null &&
        typeof target[key] === 'object'
      ) {
        return resolveUnknownProps(target[key], resolveKey);
      } else if (!target[key]) {
        return resolveUnknownProps({ [resolveKey]: true }, resolveKey);
      }

      return target[key];
    },
  };

  return new Proxy(obj, handler);
}

const user = {}

console.log(resolveUnknownProps(user, 'isUndefined').personalInfo.name.something.else); // { isUndefined: true }

因此,您将像这样使用它:

const { isUndefined } = resolveUnknownProps(user, 'isUndefined').personalInfo.name.something.else;
if (!isUndefined) {
  // Do something
}

Lodash库中有几个小助手:

isUndefined-检查值是否未定义。

_.isUndefined(undefined) // => true
_.isUndefined(null) // => false

has-检查对象是否包含属性

const object = { 'a': { 'b': 2 } }

_.has(object, 'a.b') // => true
_.has(object, 'a.c') // => false

查看注释,对于那些想同时检查两者的人来说,它是未定义的还是其值为空:

//Just in JavaScript
var s; // Undefined
if (typeof s == "undefined" || s === null){
    alert('either it is undefined or value is null')
}

如果您使用的是jQueryLibrary,那么jQuery.isEmptyObject()将足以满足这两种情况,

var s; // Undefined
jQuery.isEmptyObject(s); // Will return true;

s = null; // Defined as null
jQuery.isEmptyObject(s); // Will return true;

//Usage
if (jQuery.isEmptyObject(s)) {
    alert('Either variable:s is undefined or its value is null');
} else {
     alert('variable:s has value ' + s);
}

s = 'something'; // Defined with some value
jQuery.isEmptyObject(s); // Will return false;