其他浏览器工作正常,但在IE中我使用以下代码获得Number Expected并且它在sort函数上运行为null对象。 http://jsfiddle.net/R3ndd/2/
function list_response(jsonData) {
"use strict";
var lists = document.getElementById("lists"), anchors = document.getElementById("anchors"), jItems = jsonData.items;
var results = [], anks = [], vList, pListName, item, videoItem;
var i, j, jLen, iLen = jItems.length;
for (var i = 0; i < iLen; i++) {
if(jItems[i] != null ){
jItems[i].nameLower = jItems[i].name.toLowerCase();
}
}
jItems.sort(function (a, b) {
if(a != null && b != null){
return a.nameLower.localeCompare(b.nameLower);
}
});
有什么建议吗?谢谢!
我的解决方案
我决定使用以下命令从json中删除null对象(可以正常工作):
var y;
for (var x in jItems) {
if ( Object.prototype.hasOwnProperty.call(jItems,x)) {
y = jItems[x];
if (y==="null" || y===null || y==="" || typeof y === "undefined") {
delete jItems[x];
}
}
}
答案 0 :(得分:2)
不知道为什么IE会这样做,但这是困扰我们好人的习惯:)。好吧,我认为这将是更好的方式。
/* NOT NEEDED.
for (var i = 0; i < iLen; i++) {
if(jItems[i] != null ){
jItems[i].nameLower = jItems[i].name.toLowerCase();
}
}*/
jItems.sort(function (a, b) {
return a && b ? a.toLowerCase().localeCompare(b.toLowerCase()) : 0;
});
<强>更新强>
嗯,我想我知道IE在哪里令人不安。对不起MS,这次IE没有任何错误。如果a
或b
为null
/ ''
/ false
(或任何 falsy 值),则会发生什么情况,你的回调没有返回任何值。这会探讨“数字预期”错误。但我照顾好了,所以我的答案可能会奏效。 :)