Internet Explorer 11是否还需要ES5垫片?

时间:2018-06-14 19:41:16

标签: javascript ecmascript-5 es5-shim

我正在查看compat tables,似乎IE 11支持所有ES5,除了(在Miscellaneous下)这个功能:"可枚举的属性可以被非枚举"遮蔽。尽管提供了示例,但我不明白这意味着什么。

我可以放弃使用ES5 shim,因为IE11支持大部分内容吗?

2 个答案:

答案 0 :(得分:2)

enter image description here是的,在这种情况下放弃ES5垫片是安全的。我使网站可用IE11和常见问题是自定义变量,ES6显然和CSS calc()相关的错误。管理使用地图制作我自己的自定义变量模拟器并使用类似的方法CSS calc()。

答案 1 :(得分:1)

他们在这里使用的length属性实际上来自Function构造函数的原型Function.prototype.length,并返回function所期望的参数数量。正如您在我链接的页面上看到的那样,该属性可枚举,因此for ... in不应枚举给定的属性。以下代码段演示了该属性不可枚举,因此result将保留true



var result = true;
for(var propertyName in Function) {
  if(propertyName == 'length') {
    result = false;
  }
}

var isLengthEnumerable = Function.prototype.propertyIsEnumerable('length');
console.log('Function.prototype.length is enumerable: ' + isLengthEnumerable);
console.log('Result: ' + result);




上面的代码段为我们提供了以下输出:

  

Function.prototype.length是可枚举的:false
  结果:是的

但是在javascript中,一切都是对象,并通过其原型链从Object.prototype继承属性,包括Function。那么当我们将相同的属性length分配给Object.prototype时会发生什么?



var result1 = true;
var result2 = true;
Object.prototype.length = 42;
Object.prototype.otherProperty = 42;
for (var propertyName in Function) {
    if (propertyName == 'length') {
        result1 = false;
    }
    if (propertyName == 'otherProperty') {
        result2 = false;
    }
}

var isLengthEnumerable = Object.prototype.propertyIsEnumerable('length');
var isOtherPropertyEnumerable = Object.prototype.propertyIsEnumerable('otherProperty');
console.log('Object.prototype.length is enumerable: ' + isLengthEnumerable);
console.log('Object.prototype.otherProperty is enumerable: ' + isOtherPropertyEnumerable);
console.log('Result1: ' + result1);
console.log('Result2: ' + result2);




上面的代码段给出了以下结果:

  

Object.prototype.length是可枚举的:true
  Object.prototype.otherProperty是可枚举的:true
  结果1:真实   结果2:错误

由于我们刚刚分配的<{1}}属性 可枚举,您可能希望Object.prototype.length现在为result1。但由于false已经具有Function属性(尽管不可枚举),因此不会枚举从length继承的length属性。该物业已被阴影

这是IE11中没有发生的事情,Object.prototype将被枚举,Object.prototype.length也将成为result1