【问题标题】:ES6 Map features support - too big support in IE11?ES6 Map 功能支持——在 IE11 中支持太大?
【发布时间】:2016-12-15 19:43:27
【问题描述】:

我正在探索 ES6 的一些功能。要检查可用的内容以及我在哪里使用:

http://kangax.github.io/compat-table/es6/

为了玩耍,我使用 Babel:

https://babeljs.io/repl

在探索 Map 时,兼容性表表明

IE11 不支持构造函数参数

但是我复制了示例代码:

var result = function() {
  var key1 = {};
  var key2 = {};
  var map = new Map([[key1, 123], [key2, 456]]);

  return map.has(key1) && map.get(key1) === 123 &&
         map.has(key2) && map.get(key2) === 456;
}();

console.log(result);

在 IE11 中执行它,令我惊讶的是,结果是 truetrue 既在 Babel 中(尽管 Babel 没有生成任何代码),也在 IE 11 控制台中。

这是为什么呢?

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    为了玩耍,我使用 Babel:

    https://babeljs.io/repl

    那是 Babel 在 REPL 中使用它的 Map polyfill。如果你在 IE11 本身中逐字运行该代码,你会得到false,而不是true

    var result = function() {
      var key1 = {};
      var key2 = {};
      var map = new Map([[key1, 123], [key2, 456]]);
    
      return map.has(key1) && map.get(key1) === 123 &&
             map.has(key2) && map.get(key2) === 456;
    }();
    
    console.log(result);

    在 IE11 中的结果:


    (在 REPL 中,如果你 console.log(Map),它会显示 function Map() { [native code] },我曾短暂地感到震惊。但 logansfmyth 很友好地在 a comment 中确认 Babel 使用 shimmed符合本机行为的函数。)

    【讨论】:

    • 谢谢。我在这里测试过,你是对的。但是,如果我打开 Babel 的页面并在多行模式下运行它,结果是正确的。所以这意味着 Babel 正在使用 shim。相当误导
    • @dragonfly:嗯,REPL 旨在为您提供一个快速的环境来测试如果您使用 Babel 进行编译将获得什么。但我不得不说,我不太确定他们到底在做什么,才能让它发挥作用。请参阅答案末尾的更新... :-)
    • Babel 确实对此进行了 polyfill。 [native code] 是一个值得商榷的东西,但 core-js 目前这样做是为了让具有原生行为的事物看起来很原生。
    • @loganfsmyth:谢谢,这是有道理的。我应该有意识不相信函数的toString
    • @loganfsmyth:这是否意味着当我在构建管道中包含 babel 时,我还需要包含整个 core-js?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多