[Vue警告]:“TypeError:无法读取未定义的属性'type'?”

时间:2017-07-22 09:04:54

标签: javascript ecmascript-6 vuejs2 webpack-2

有人可以帮我理解下面代码的行为吗?:

wrapperProperties () {
  let properties = this.getToValueOf('wrapper', {})
  [properties['type'], properties['message']] = this.defineValidationState()
  return properties
}

我收到以下警告:

  

[Vue警告]:渲染函数出错:“TypeError:无法读取未定义的属性'type'”

当我在let关键字和解构分配之间添加任何变量时,代码成功完成:

wrapperProperties () {
  let properties = this.getToValueOf('wrapper', {}), mysteriousVar
  [properties['type'], properties['message']] = this.defineValidationState()
  return properties
}

为什么会这样?

1 个答案:

答案 0 :(得分:2)

问题在于:

let properties = this.getToValueOf('wrapper', {})
[properties['type'], properties['message']]

被解释为:

let properties = this.getToValueOf('wrapper', {})[properties['type'], properties['message']]

因此,不使用解构,而是使用[]语法将其解释为属性访问。

您应该在每个语句的末尾插入分号,或者您应该真正阅读并理解standard.js编码标准。根据standard.js,您必须在以{[开头的每一行的开头添加分号。

我个人喜欢经典" Douglas Crockford"样式,所以我在每个语句的末尾添加一个分号。但无论哪种方式都有效:

"克罗克福德"式:

wrapperProperties () {
  let properties = this.getToValueOf('wrapper', {});
  [properties['type'], properties['message']] = this.defineValidationState();
  return properties;
}

Standard.js风格:

wrapperProperties () {
  let properties = this.getToValueOf('wrapper', {})
  ;[properties['type'], properties['message']] = this.defineValidationState()
  return properties
}