解决“无法读取未定义属性*”的最佳方法?

时间:2016-07-21 03:31:38

标签: javascript coding-style

这个错误在javascript开发中出现了很多。

  

无法读取未定义的属性连接

有没有最好的方法来处理这个问题?

我使用的一些技术是:

初始化

question.tags = question.tags || [];
console.log(question.tags.join(', ');

如果声明

if(question.tags) {
  console.log(question.tags.join(', ');
}

4 个答案:

答案 0 :(得分:1)

您可以使用if..elseObject.hasOwnProperty()Array.isArray()来确定question是否存在且对象是否具有属性tagsquestion.tags是一个数组

if (typeof question === "object" 
    && question.hasOwnProperty("tags") 
    && Array.isArray(question.tags)) {
  //do stuff
} else {
  // do other stuff, e.g
  // question = {};
  // question.tags = [];
}

答案 1 :(得分:0)

没有具体而准确的方法。如果存在Array或Object或String的实例,则它会包含原型函数。就像一个数组实例有一个splice(),String实例有一个replace()。

现在,当此实例未定义时,它会抛出JS错误。让我们假设<p>应该是一个数组。您可以通过逻辑||

进行脏检查
a

或if块或三元属性

(a || []).length;

或类型检查

return a ? a.length || undefined;

答案 2 :(得分:0)

question.tags ? question.tags : []

答案 3 :(得分:-2)

你可以在条件如

中使用===和!==运算符
  if(object.property !== undefined)
     {
       ///write your code here
      }

此运算符将匹配您的值+类型,以便易于识别是否提及属性未定义。希望这有助于:)