2012-09-27 61 views
2

我有下面的JS。IE8无法访问for循环内的对象属性

  • 对象数组。每个具有“s”和“e”属性的对象。
  • 第一个循环是记录阵列上第一个项目的“s”和“e”属性的测试。
  • 第二个循环是我希望工作代码发生的地方,但是我无法从此循环中访问我的属性。而这似乎只发生在IE8及更低版本中。

错误在IE8中,我得到的是:

'S' 为空或不是对象

任何想法,将不胜感激?

var t = [ 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
]; 

var obj = t[0]; 
for (var prop in obj) { 
    console.log(prop+": "+obj[prop]); 
} 

for (var i = t.length - 1; i >= 0; i--) { 
    var l = t[i]; 
    var s = l.s; 
    console.log(s); 
} 
+0

我还是会有点颠簸发现与IE有关的*死亡*逗号*。 –

+0

从右括号删除最后一个逗号'{s:“blah”,e:“blah blah”},'... –

+0

噢,当然是:http://jsfiddle.net/BRuAT/1/它* *死亡*的尾随逗号,它不再那么致命了。 –

回答

2

在t数组中的最后一个对象之后有逗号。将它移除,因为它在循环中获得了一个未定义的第一个对象,因为在IE8中它最初不会引发错误,但它会获得一个空对象。这就是你得到错误的原因。

您的代码:

var t = [ 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    undefined // How IE8 parses it and your loop starts here 
]; 

这不会引发错误:

var t = [ 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"} // No comma so array is terminated here 
]; 
2

在数组中的最后一个元素为null。尝试删除最后一个“”数组中

var t = [ 
{s: "blah", e: "blah blah"}, 
{s: "blah", e: "blah blah"}, 
{s: "blah", e: "blah blah"}, 
{s: "blah", e: "blah blah"} 
]; 
1

常见错误:

var t = [ 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, // remove the comma 
]; 

var t = [ 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"}, 
    {s: "blah", e: "blah blah"} 
]; 

现在将在IE8正常工作......我测试了它:http://jsfiddle.net/SnakeEyes/qFgjh/