IE8是否支持javascript .map()函数?

时间:2011-09-08 15:50:28

标签: javascript internet-explorer-8 map

这样做时:

var a = new Array("a", "b");
a.map(function() { });
在IE8中我得到了:

"Object doesn't support this property or method"

IE8中不支持此方法,还是有其他问题?我有一个谷歌,但获得了很多谷歌地图的JavaScript问题/问题......

编辑:确定IE8及以下版本不支持.map()函数。复制粘贴来自MDN here的代码,如果没有本机支持,它将完全根据规范将.map()函数添加到Array原型中(并且它似乎完美地工作)。

5 个答案:

答案 0 :(得分:43)

解决方案是jQuery.map

而不是: a.map(function( ) { });

你必须做

jQuery.map(a, function( ) { //what ever you want todo .. }

答案 1 :(得分:40)

IE8不支持map()。如有疑问,请查看MDN(Mozilla开发者网络):

map - MDN

看起来IE在版本9中添加了对map()的支持。

答案 2 :(得分:21)

(function(fn){
    if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)r.push(f(this[i]));return r}
    if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(f(this[i]))r.push(this[i]);return r}
})(Array.prototype);

在第一次.map或.filter调用之前放置任何位置。问题解决了。 jQuery.map()方法无法按预期工作。

<强>更新 我刚刚在稀疏数组上测试它:如果map或filter参数是一个接受并处理undefined值的函数 - 它可以工作,但结果并不明显:

让我们定义测试稀疏数组:

var t = []
t[1] = 1; t[3] = 3; t[5] = 5;

让我们看看IE8对t的评价:“[undefined,1,undefined,3,undefined,5]”

让我们试试:

t.filter(function(x){return x<4})

这是什么,IE8?它是:“[1,3]”。注意 - 没有未定义的值。我个人希望如此。

但试试这个:

t.map(function(x){return 2<<x})

而且...... “[2,4,2,16,6,6]”。那真是怪了! :)试试这个:

t.map(function(x){return Math.pow(2,x)})

并且?... “[NaN,2,NaN,8,NaN,32]” - 我希望这个结果可以用于之前的测试。它至少是逻辑的 - Math.pow()应该返回number类型NaN,不管它是什么意思是为无效操作保留的特殊number类型。所以结果或多或少是正确的。如果t仍然是稀疏数组,那么它将完全正确map结果。

所以没有进一步的麻烦 - 最终正确版本的mapfilter方法

(function(fn){
    if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined)r[i]=f(this[i]);return r}
    if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined&&f(this[i]))r[i]=this[i];return r}
})(Array.prototype);

测试:

var t = []; t[1] = 1; t[3] = 3; t[5] = 5;
var t1 = t.map(function(x){return 2<<x});
var t2 = t.filter(function(x){return x<10});
console.debug(t);
console.debug(t1);
console.debug(t2);

预期结果:

  

[object Array] [undefined,1,undefined,3,undefined,5]

     

[object Array] [undefined,4,undefined,16,undefined,64]

     

[object Array] [undefined,1,undefined,3,undefined,5]

答案 3 :(得分:7)

MDN说IE 9支持它。没有提到IE 8。

enter image description here

答案 4 :(得分:0)

On MSDN it is said in Requirements for map: Not supported in the following document modes: Quirks, Internet Explorer 6 standards, Internet Explorer 7 standards, Internet Explorer 8 standards.

Map只是数组“访问者”模式的一种实现。如此简单的替代品可能是:

function visitArray(arr, visitor) {
    var result = [];

    for (var i = 0; i < arr.length; i ++) {
        result[i] = visitor(arr[i]);
    }

    return result;
}

该函数还需要在每个数组元素上调用的数组和函数。它返回一个新数组,其中包含每个原始数组元素的访问者调用结果

相关问题