Javascript' map'不在IE工作

时间:2014-04-01 14:59:57

标签: javascript jquery map

我有以下javascript -

var trim = intsAsJSArray.replace(/[\[\]]/g, "");
       var data = trim.split(",");

       data = data.map(function (d) {
           return +d;
       });

然而,这在IE中失败并出现错误 -

Error: Object doesn't support property or method 'map'

这很混乱,因为它适用于Chrome和FireFox。这是为什么?

3 个答案:

答案 0 :(得分:4)

IE8 doesn't support大多数ES5阵列方法 - 包括Array.map。因此,您必须使用扩展Array.prototype的{​​{3}},或者切换到附加到自己对象的ES5方法的库 - 例如jQuery(ES5 shim)和Underscore({ {3}})。

当您使用jquery标记标记您的问题时,您很可能已经使用了一个,所以只需更改您的代码就足够了:

var data = $.map(trim.split(","), Number);

答案 1 :(得分:2)

ES5中添加了

Array#map。 IE8在ES5规范完成之前问世,并且不包括大多数ES5功能(包括map)。 IE9有Array#map和大多数(但不是全部)其他ES5添加; IE10 +具有完整的ES5功能。 Here's a rundown of ES5 support in various browsers

如果您搜索“es5 shim”,您会找到各种选项来添加可追溯添加到旧环境(包括Array#map)的内容。

由于您已标记了问题jquery,因此可以使用the $.map function jQuery supplies

答案 2 :(得分:0)

IE8 doesn't support map,因为它已添加到ES5中。

如果您想为其添加垫片,请查看此polyfil from the MDN website

if (!Array.prototype.map) {

    Array.prototype.map = function (fun /*, thisArg */ ) {
        "use strict";

        if (this === void 0 || this === null)
            throw new TypeError();

        var t = Object(this);
        var len = t.length >>> 0;
        if (typeof fun !== "function")
            throw new TypeError();

        var res = new Array(len);
        var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
        for (var i = 0; i < len; i++) {
            // NOTE: Absolute correctness would demand Object.defineProperty
            //       be used.  But this method is fairly new, and failure is
            //       possible only if Object.prototype or Array.prototype
            //       has a property |i| (very unlikely), so use a less-correct
            //       but more portable alternative.
            if (i in t)
                res[i] = fun.call(thisArg, t[i], i, t);
        }

        return res;
    };
}

否则只需编写自己的函数来创建一个具有输入值的新对象。