2017-05-21 48 views
0

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

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); 
 
});

为什么?

我使用铬 版本53.0.2785.116(64位) - 的MacBook Air 2014

+0

我只是试图在Chrome 58的第一个例子;无法重现。你正在使用哪种浏览器? – Aurora0001

+0

此代码应该正常工作,我只是尝试在Chrome 58上,它的工作 – quirimmo

+0

请参阅[浏览器兼容性](http://www.caniuse.com/#search=foreach)for'aray.forEach' – Rajesh

回答

1

你忽略不管实际上是从你的代码引起的问题。

紧接在[之前,您必须拥有指向某个对象的内容。

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

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

由于无论对象是什么,都没有height属性,您会得到undefined,该属性没有forEach属性。

修复此问题在前面的语句的末尾加上一个分号。

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

+0

谢谢,那是这样 – bumbeishvili

2

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

样品

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

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

相关问题