2

我有下面的JS。

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

我得到的 IE8 中的错误是:

's' 为 null 或不是对象

任何想法,将不胜感激?

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

3 回答 3

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
];
于 2012-09-27T06:03:51.380 回答
2

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

var t = [
{s: "blah", e: "blah blah"},
{s: "blah", e: "blah blah"},
{s: "blah", e: "blah blah"},
{s: "blah", e: "blah blah"}
];
于 2012-09-27T06:04:38.967 回答
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/

于 2012-09-27T06:06:21.600 回答