JavaScript检查未定义

bprjcwpo  于 2023-01-19  发布在  Java
关注(0)|答案(3)|浏览(191)
    • 代码:**
if (content.context_data.custom_topic === undefined) {
  console.log('doesnt work');
}

以及

if (typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined') {
  console.log("Inside if")
}
    • 错误:**

source_code. js:71未捕获的类型错误:无法读取空值的属性"custom_topic
我想检查一下content.contect_data.custom_topic是否可用。我已经搜索了很多Stackoverflow,但是我发现的每个变体似乎都不起作用。
我希望创建如下内容:

if(content.context_data.custom_topic !== undefined)
{
   var custom_topic = content.context_data.custom_topic;
}

注意:我必须使用原生JS。

qhhrdooz

qhhrdooz1#

您可以将其检查为:

if (content.context_data && content.context_data.custom_topic === undefined) { 
    console.log('doesnt work');
}
ijnw1ujt

ijnw1ujt2#

如果你想检查一个object的属性,你必须同时检查它的父属性,因为如果父属性是undefined,那么你的代码将抛出一个错误。

if (
  content !== undefined ||
  content.context_data !== undefined ||
  content.context_data.custom_topic !== undefined
) {
  console.log("doesn't work");
} else {
  var custom_topic = content.context_data.custom_topic;
}

或者,您可以保留undefined,并像这样将其链接起来

if (
  content &&
  content.context_data &&
  content.context_data.custom_topic
) {
  // do stuff
}

或者,您可以创建一个算法,该算法需要object和属性名称(例如custom_topic),并返回boolean(无论它是否存在)。

const propExists = (obj: any, propName: string): boolean => {
  const propNames = Object.getOwnPropertyNames(obj);
  let exists = false;

  if (propNames.includes(propName)) {
    exists = true;
  } else {
    for (let i = 0; i < propNames.length; i++) {
      const prop = propNames[i];

      if (
        typeof obj[prop] === "object" &&
        Object.getOwnPropertyNames(obj[prop]).length > 0
      ) {
        exists = propExists(obj[prop], propName);
      }
    }
  }

  return exists;
};

const myObj = {
  content: {
    context_data: {
      custom_topic: "My topic",
    },
  },
};

console.log(propExists(myObj, "custom_topic"));

但很明显,如果你不使用一次以上的算法,你就不需要它。

abithluo

abithluo3#

因为context_data可以为空,所以可以使用optional chaining

var content = {};

if (content.context_data?.custom_topic !== undefined) {
  console.log(content.context_data.custom_topic);
} else {
  console.log("undefined value");
}

content.context_data = { custom_topic: "test"};

if (content.context_data?.custom_topic !== undefined) {
  console.log(content.context_data.custom_topic);
} else {
  console.log("undefined value");
}

相关问题