我才知道,在IE8不支持濾鏡陣列功能。 尋找互聯網上的幫助後,我發現這一點 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filterIE8濾鏡陣列()不工作
這表明,IE8將工作使用上面的代碼。
HTML代碼:
<body>
<a href="javascript:void(0)" onclick="calculateDiff()">Calculate</a>
</body>
JS代碼:
function calculateDiff() {
var arr1 = new Array(1, 2, 3);
var arr2 = new Array(3, 4, 5);
var res = arr1.diff(arr2);
alert(res);
}
Array.prototype.diff = function(a) {
if(!Array.prototype.filter) {
alert("not supported");
Array.prototype.filter = function(fun) {
"use strict";
if(this == null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if(typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for(var i = 0; i < len; i++) {
if(i in t) {
var val = t[i]; // in case fun mutates this
if (fun.call(thisp, val, i, t))
res.push(val);
}
}
return res;
};
}
else {
alert("supported");
return this.filter(function(i) {
return !(a.indexOf(i) > -1);
});
}
}
我已經實現這個小提琴的解決方案 - http://jsfiddle.net/7LFMA/
什麼是錯誤的代碼?爲什麼它不起作用?
你應該在你的陣列拆分出來.filter的檢查/創建() - 或者你會試圖把它每次爲.diff()被調用時,你只需要做一次。 - 所有缺失的ES5方法都有polyfills - 請看這裏:http://www.calormen.com/polyfill/ – Lewis 2013-03-22 09:40:07