为什么我得到,无法读取未定义错误的属性?

时间:2017-05-21 11:02:45

标签: javascript arrays

此代码

function Test(){

}
new Test()



['width', 'height'].forEach(key => {
  console.log(key);
});

给我错误

enter image description here

但这段代码不是

function Test(){

}
new Test()

var arr = ['width', 'height'];
arr.forEach(key => {
  console.log(key);
});

为什么吗

我正在使用chrome 版本53.0.2785.116(64位) - Macbook air 2014

2 个答案:

答案 0 :(得分:2)

根据快照,您使用Chrome并且Chrome长时间支持.forEach。我的猜测是,问题是由于缩小或缺少分号(;

<强>示例

function test(){
  this.name = "test";
}

var a = new test()['width', 'height'].forEach(key => {
  console.log(key);
});

答案 1 :(得分:1)

您已从代码中省略了实际导致问题的任何内容。

[之前,您必须拥有引用某个对象的内容。

这意味着[]语法成为读取属性值而不是创建数组的语法的语法。

然后(因为您使用的是逗号运算符)'width', 'height'解析为'height',因此您尝试阅读height属性。

由于对象无任何height属性,因此undefined没有forEach属性。

要修复此在前一个语句末尾添加分号

代码的第二个版本有效,因为var语句不能遵循您之前的语法,因此它会触发自动分号插入