开发者问题收集

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

2017-05-21
1085

此代码

function Test(){

}
new Test()



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

给我错误

在此处输入图片描述

但此代码没有

function Test(){

}
new Test()

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

为什么?

我使用的是 chrome 版本 53.0.2785.116 (64 位) - Macbook air 2014

2个回答

根据快照,您正在使用 Chrome,并且 Chrome 很早就支持 .forEach 。我猜,问题是由于最小化或缺少分号( ; )造成的。

示例

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

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

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

[ 之前,您必须有一些引用对象的内容。

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

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

由于无论对象是什么,都没有 height 属性,因此您将获得 undefined ,它没有 forEach 属性。

要解决此问题,请 在上一个语句的末尾添加一个分号

代码的第二个版本可以正常工作,因为 var 语句不能遵循它之前的语法,因此它会触发 自动分号插入

Quentin
2017-05-21