我没有IE8,所以我正在IE10内测试IE8.当我切换到文档模式的“IE8标准”时,数组对象的
JavaScript地图函数给出了一个javascript错误:对象不支持属性或方法’map’
但是当我切换到文档模式的“标准”时,没有错误.我应该测试哪种模式?
解决方法
不支持,但
MDN提供了非常接近规格的垫片:
- // Production steps of ECMA-262,Edition 5,15.4.4.19
- // Reference: http://es5.github.com/#x15.4.4.19
- if (!Array.prototype.map) {
- Array.prototype.map = function(callback,thisArg) {
- var T,A,k;
- if (this == null) {
- throw new TypeError(" this is null or not defined");
- }
- // 1. Let O be the result of calling ToObject passing the |this| value as the argument.
- var O = Object(this);
- // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
- // 3. Let len be ToUint32(lenValue).
- var len = O.length >>> 0;
- // 4. If IsCallable(callback) is false,throw a TypeError exception.
- // See: http://es5.github.com/#x9.11
- if (typeof callback !== "function") {
- throw new TypeError(callback + " is not a function");
- }
- // 5. If thisArg was supplied,let T be thisArg; else let T be undefined.
- if (thisArg) {
- T = thisArg;
- }
- // 6. Let A be a new array created as if by the expression new Array(len) where Array is
- // the standard built-in constructor with that name and len is the value of len.
- A = new Array(len);
- // 7. Let k be 0
- k = 0;
- // 8. Repeat,while k < len
- while(k < len) {
- var kValue,mappedValue;
- // a. Let Pk be ToString(k).
- // This is implicit for LHS operands of the in operator
- // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
- // This step can be combined with c
- // c. If kPresent is true,then
- if (k in O) {
- // i. Let kValue be the result of calling the Get internal method of O with argument Pk.
- kValue = O[ k ];
- // ii. Let mappedValue be the result of calling the Call internal method of callback
- // with T as the this value and argument list containing kValue,k,and O.
- mappedValue = callback.call(T,kValue,O);
- // iii. Call the DefineOwnProperty internal method of A with arguments
- // Pk,Property Descriptor {Value: mappedValue,: true,Enumerable: true,Configurable: true},// and false.
- // In browsers that support Object.defineProperty,use the following:
- // Object.defineProperty(A,Pk,{ value: mappedValue,writable: true,enumerable: true,configurable: true });
- // For best browser support,use the following:
- A[ k ] = mappedValue;
- }
- // d. Increase k by 1.
- k++;
- }
- // 9. return A
- return A;
- };
- }