IE8支持javascript .map()函数吗?
当这样做时:
var a = new Array("a", "b"); a.map(function() { });
在IE8中我得到:
"Object doesn't support this property or method"
这种方法不支持IE8,或者我有其他一些问题? 我有一个谷歌,但得到大量的谷歌地图的JavaScript问题/问题…
编辑 :确定IE8及以下不支持.map()函数。 从MDN复制粘贴代码,如果不是本地支持的(这看起来完美无缺),那么将根据规范精确地将.map()函数添加到Array原型。
IE8不支持map()
。 如有疑问,请查看MDN(Mozilla开发者networking):
地图 – MDN
看起来IE在版本9中增加了对map()
支持。
解决scheme是jQuery.map
而不是: a.map(function( ) { });
你必须做
jQuery.map(a, function( ) { //what ever you want todo .. }
(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()方法不能按预期方式工作。
更新:我刚才testing稀疏数组:如果映射或filter参数是一个函数接受和处理undefined
值 – 它的作品,但结果并不明显:
我们来定义testing稀疏数组:
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,2,64]” 。 这很奇怪! :) 尝试这个:
t.map(function(x){return Math.pow(2,x)})
而且…? “[NaN,2,NaN,8,NaN,32]” – 我宁愿期待这个结果进行前面的testing。 这至less是合乎逻辑的 – Math.pow()应该返回一个number
types, NaN
,不pipe它是什么意思是一个特殊的number
types为无效操作保留。 所以结果或多或less是正确的。 如果t仍然是一个稀疏数组,那么这将是完全正确的。
所以没有更多的东西 – 最终正确版本的map
和filter
方法 :
(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);
和testing:
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]
MDN表示,IE 9支持它。 没有提到IE 8。
在MSDN上,它说在映射的要求:不支持在以下文档模式:怪癖,Internet Explorer 6标准,Internet Explorer 7标准,Internet Explorer 8标准。
Map只是数组“访问者”模式的一个实现。 所以很容易替代它可能是:
function visitArray(arr, visitor) { var result = []; for (var i = 0; i < arr.length; i ++) { result[i] = visitor(arr[i]); } return result; }
该函数还需要调用每个数组元素的数组和函数。 它将为每个原始数组元素返回一个访问者调用结果的新数组