Javascript 无法从IE8中的循环中获取值

Javascript 无法从IE8中的循环中获取值,javascript,internet-explorer-8,Javascript,Internet Explorer 8,我正在根据另一个选择中的选择填充选择。在Chrome、FireFox、Safari、Edge和IE9+中,一切都非常好 我的问题在IE8中,它给了我一个错误“无法获取属性'makeID'的值:对象为null或未定义”。IE的开发工具指出第一个循环是问题所在,但我无法找出问题所在 $(函数(){ var makeList={ “makeTable”:[ {“makeID”:“0”,“makeName”:“选择您的make”}, {“makeID”:“1”,“makeName”:“Make 1”}

我正在根据另一个选择中的选择填充选择。在Chrome、FireFox、Safari、Edge和IE9+中,一切都非常好

我的问题在IE8中,它给了我一个错误“无法获取属性'makeID'的值:对象为null或未定义”。IE的开发工具指出第一个循环是问题所在,但我无法找出问题所在

$(函数(){
var makeList={
“makeTable”:[
{“makeID”:“0”,“makeName”:“选择您的make”},
{“makeID”:“1”,“makeName”:“Make 1”},
{“makeID”:“2”,“makeName”:“Make 2”},
{“makeID”:“3”,“makeName”:“Make 3”},
]
};
var模型列表={
“制造1”:[
{“modelID”:“1”,“modelName”:“Make 1 Model 1”},
{“modelID”:“2”,“modelName”:“Make 1 Model 2”},
{“modelID”:“3”,“modelName”:“Make 1 Model 3”},
{“modelID”:“4”,“modelName”:“Make 1 Model 4”},
{“modelID”:“5”,“modelName”:“Make 1 Model 5”},
{“modelID”:“6”,“modelName”:“Make 1 Model 6”}
],
“制造2”:[
{“modelID”:“1”,“modelName”:“Make 2 Model 1”},
{“modelID”:“2”,“modelName”:“Make 2 Model 2”},
{“modelID”:“3”,“modelName”:“Make 2 Model 3”},
{“modelID”:“4”,“modelName”:“Make 2 Model 4”},
{“modelID”:“5”,“modelName”:“Make 2 Model 5”},
{“modelID”:“6”,“modelName”:“Make 2 Model 6”}
],
“制造3”:[
{“modelID”:“1”,“modelName”:“Make 3 Model 1”},
{“modelID”:“2”,“modelName”:“Make 3 Model 2”},
{“modelID”:“3”,“modelName”:“Make 3 Model 3”},
{“modelID”:“4”,“modelName”:“Make 3 Model 4”},
{“modelID”:“5”,“modelName”:“Make 3 Model 5”},
{“modelID”:“6”,“modelName”:“Make 3 Model 6”}
]
};
var makeItems=“”;
对于(var i=0;i

制作

模型
在IE 8中,如果数组中有一个尾随逗号,那么数组长度实际上会增加1


在本例中,您有4个元素,但带有尾随逗号,因此长度为5。因此,
makeList.makeTable[4].makeID将为您提供空对象

问题在于数组中多余的逗号:

    "makeTable": [
        {"makeID": "0", "makeName": "Select your make"}, 
        {"makeID": "1", "makeName": "Make 1"}, 
        {"makeID": "2", "makeName": "Make 2"}, 
        {"makeID": "3", "makeName": "Make 3"}, 
    ]
};
最新版本的Javascript允许在数组或对象文本中的最后一项后面添加可选的逗号,并忽略它。IE8将其视为指示另一个数组元素,其值为
未定义
,因此它将数组长度加1。当您尝试访问此元素的属性时,会出现错误

将其更改为:

    "makeTable": [
        {"makeID": "0", "makeName": "Select your make"}, 
        {"makeID": "1", "makeName": "Make 1"}, 
        {"makeID": "2", "makeName": "Make 2"}, 
        {"makeID": "3", "makeName": "Make 3"}
    ]
};

由于某些原因,IE 8中的数组长度为5,这是因为数组末尾有额外的
。IE8不理解应该忽略这一点。这可以解释为什么会出现错误,您正确地迭代了0->3,但是makeTable[4]不存在。