【问题标题】:fill() not supported in IE11IE11 不支持 fill()
【发布时间】:2017-05-02 13:15:00
【问题描述】:

我有以下语法。我是 ES6 语法的新手。

const renderLoading = () => Array(20).fill('').map(() => <ExpampleLine/>);

Internet Explorer 不支持 fill() 命令。单独使用 fill() 是否有任何解决方法,或者我应该重写整个语法。需要一些语法帮助。

【问题讨论】:

  • 我假设你使用 Babel for JSX,标准方法是安装和加载 babel-polyfill

标签: javascript reactjs ecmascript-6


【解决方案1】:

使用 polyfill:

if (!Array.prototype.fill) {
  Object.defineProperty(Array.prototype, 'fill', {
    value: function(value) {

      // Steps 1-2.
      if (this == null) {
        throw new TypeError('this is null or not defined');
      }

      var O = Object(this);

      // Steps 3-5.
      var len = O.length >>> 0;

      // Steps 6-7.
      var start = arguments[1];
      var relativeStart = start >> 0;

      // Step 8.
      var k = relativeStart < 0 ?
        Math.max(len + relativeStart, 0) :
        Math.min(relativeStart, len);

      // Steps 9-10.
      var end = arguments[2];
      var relativeEnd = end === undefined ?
        len : end >> 0;

      // Step 11.
      var final = relativeEnd < 0 ?
        Math.max(len + relativeEnd, 0) :
        Math.min(relativeEnd, len);

      // Step 12.
      while (k < final) {
        O[k] = value;
        k++;
      }

      // Step 13.
      return O;
    }
  });
}

此处提供:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/fill?v=example#Polyfill

【讨论】:

    【解决方案2】:

    这是一个符合 TypeScript 的变体:

    if (!Array.prototype.fill) {
        Object.defineProperty(Array.prototype, 'fill', {
            value: function(value) {
    
                if (this == null) {
                    throw new TypeError('this is null or not defined');
                }
    
                const O = Object(this);
                // tslint:disable-next-line:no-bitwise
                const len = O.length >>> 0;
                const start = arguments[1];
                // tslint:disable-next-line:no-bitwise
                const relativeStart = start >> 0;
    
                let k = relativeStart < 0 ?
                    Math.max(len + relativeStart, 0) :
                    Math.min(relativeStart, len);
    
                const end = arguments[2];
                // tslint:disable-next-line:no-bitwise
                const relativeEnd = end === undefined ? len : end >> 0;
    
                const final = relativeEnd < 0 ?
                    Math.max(len + relativeEnd, 0) :
                    Math.min(relativeEnd, len);
    
                while (k < final) {
                    O[k] = value;
                    k++;
                }
    
                return O;
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多