2016-08-09 2 views
3

Я изучаю ES6 несколько функций. Для проверки того, что доступно и где я использую:ES6 Поддержка функций карты - слишком большая поддержка в IE11?

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

Чтобы играть вокруг я использую Бабеля:

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 и к моему удивлению, результат правда. true был как в Babel (хотя Babel не генерировал никакого кода), а также в консоли IE 11.

Почему?

ответ

2

Чтобы играть вокруг я использую Бабель:

https://babeljs.io/repl

Это Бабель, используя его Map polyfill в REPL. Если запустить этот код, дословно, в самом 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:

enter image description here


(Я был кратко брошен тем фактом, что в REPL, если вы console.log(Map), он показывает function Map() { [native code] }. Но logansfmyth был достаточно любезен, чтобы подтвердить в a comment, что Babel делает это с помощью проецируемых функций, если они соответствуют собственному поведению.)

+0

Спасибо. Я проверил его здесь, и вы правы. Но все же, если я открою страницу Вавилона и запустим ее в многострочном режиме, результат будет правдой. Значит, это означает, что Бабель использует прокладку. Совершенно ошибочно – dragonfly

+0

@dragonfly: Ну, REPL призван дать вам быструю среду для тестирования того, что вы получите, если перейдете с Babel. Но я должен сказать, что я не совсем уверен, что они делают, чтобы заставить его работать; см. обновление в конце ответа ... :-) –

+2

Вавилон действительно полиполняет это. '[Машинный код]' спорный предмет, но 'ядро-js' в данный момент делает это, чтобы сделать вещи выглядеть родным, если у них есть родное поведение. – loganfsmyth