いいえ; ES6 は多くの新機能を提供しますが、すべてのブラウザがそれを完全にサポートできるわけではありません。たとえば、IE7 ~ 11 バージョンは基本的に ES6 をサポートせず、Edge12 ~ 14 は ES6 の新機能の一部のみをサポートします。 ES6 新機能を備えた最もユーザー フレンドリーなブラウザは Chrome と Firefox です。Chrome はバージョン 51 以降の ES6 新機能の 97% をサポートでき、Firefox はバージョン 53 以降の ES6 新機能の 97% をサポートできます。
このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。
ES6 は多くの新機能を提供しますが、すべてのブラウザがそれらを完全にサポートできるわけではありません。幸いなことに現在、主要なブラウザは ES6 の新機能への対応を加速しており、その中でも ES6 の新機能に最も対応しやすいブラウザは Chrome と Firefox です。
ES6 構文のブラウザ互換性の概要
ブラウザ | サポートされていないバージョン | 部分的にサポートされているバージョン | サポートされているバージョン |
---|---|---|---|
IE | 6-10 | 11 | |
エッジ | 15-18、79-87 | ||
2-5 | 6-53 | 54-86 | |
4-20 | 21-50 | 51-90 | |
3.1-7 | 7.1-9.1 | 10-13.1、14、TP | |
10-12.1 | 15- 37 | 38-72 | |
3.2-6.1 | 7-9.310-13.7、14.2 | ||
すべて | |
||
#2.1-4.34.4-4.4 .4 | 81 | Opera モバイル | |
#59 | |||
##87 |
Android 版 Firefox | ||
##83 | Android 用 UC ブラウザ |
||
##12.12 | 4 | ||
QQ ブラウザ |
|||
Baidu ブラウザ |
|||
KaiOS ブラウザ |
2.5 | ||
各ブラウザの ES6 サポートの詳細については、https://caniuse.com/?search=es6 お使いのブラウザが ES6 をサポートしているかどうかを知りたい場合は、http://ruanyf を確認してください。 .github.io/es-checker/index.cn.html ES2015 のデスクトップ ブラウザのサポート
IE11が再び足を引きずってES6を完全に諦め、Edgeがその将来をサポートする姿勢が見て取れます。 IE11 は ES6 と事実上互換性があります では、純粋な ES6 スクリプトを IE11 で実行するにはどうすればよいでしょうか? Babel は効果的なソリューションを提供します。 2 つのスクリプトを紹介します:
スクリプト ブロックをマークします <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>IE11 With ES6</title> <script src="./browser-polyfill.min.js"></script> <script src="./browser.min.js"></script> <script type="text/babel"> const list = ['one', 'two', 'three']; list.forEach((item, index) => { alert(item + (index + 1)); }); let promise = new Promise(function (resolve, reject) { alert('Promise'); resolve(); }); promise.then(function () { alert('resolved.'); }); const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]); alert(items.size) const map = new Map(); const k1 = ['a']; const k2 = ['a']; map.set(k1, 111).set(k2, 222); alert(map.get(k2)) </script> </head> <body> </body> </html> したがって、ここには 2 つの混乱があります: 最初: 2 番目: ポリフィルは正確に何をするのですか? 個別に説明しましょう。非圧縮コードを見てみましょう: https://cdn.bootcss.com/babel-core/5.8 .38/ browser.js //页面加载后,执行runScripts方法 if (global.addEventListener) { global.addEventListener("DOMContentLoaded", runScripts, false); } else if (global.attachEvent) { global.attachEvent("onload", runScripts); } var runScripts = function runScripts() { var scripts = []; //识别类型 var types = ["text/ecmascript-6", "text/6to5", "text/babel", "module"]; var index = 0; /** * Transform and execute script. Ensures correct load order. */ var exec = function exec() { var param = scripts[index]; if (param instanceof Array) { transform.run.apply(transform, param); index++; exec(); } }; /** * Load, transform, and execute all scripts. */ var run = function run(script, i) { var opts = {}; if (script.src) { transform.load(script.src, function (param) { scripts[i] = param; exec(); }, opts, true); } else { opts.filename = "embedded"; scripts[i] = [script.innerHTML, opts]; } }; // Collect scripts with Babel `types`. var _scripts = global.document.getElementsByTagName("script"); //按照类别加载 for (var i = 0; i < _scripts.length; ++i) { var _script = _scripts[i]; if (types.indexOf(_script.type) >= 0) scripts.push(_script); } //执行 for (i in scripts) { run(scripts[i], i); } exec(); }; 私たちが注目している text/babel はここにあると思います: var type = ["text/ecmascript-6", "text/ 6to5" 、"text/babel"、"module"]; ページ上の上記 3 つの項目でマークされたステップを取得し、変換ライブラリを使用してそれらをロードし、実行のために ES5 に変換します。 それでは、polyfill は何をするのでしょうか? コードを読み続けてください https://cdn.bootcss.com/babel-core/5.8.38/browser-polyfill.js $export($export.P, 'Array', { // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) forEach: $.each = $.each || methodize(createArrayMethod(0)), // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) map: methodize(createArrayMethod(1)), // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) filter: methodize(createArrayMethod(2)), // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) some: methodize(createArrayMethod(3)), // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) every: methodize(createArrayMethod(4)), // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) reduce: createArrayReduce(false), // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) reduceRight: createArrayReduce(true), // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) indexOf: methodize(arrayIndexOf), // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) lastIndexOf: function(el, fromIndex /* = @[*-1] */){ var O = toIObject(this) , length = toLength(O.length) , index = length - 1; if(arguments.length > 1)index = Math.min(index, toInteger(fromIndex)); if(index < 0)index = toLength(length + index); for(;index >= 0; index--)if(index in O)if(O[index] === el)return index; return -1; } }); var createArrayReduce = function(isRight){ return function(callbackfn, memo){ aFunction(callbackfn); var O = IObject(this) , length = toLength(O.length) , index = isRight ? length - 1 : 0 , i = isRight ? -1 : 1; if(arguments.length < 2)for(;;){ if(index in O){ memo = O[index]; index += i; break; } index += i; if(isRight ? index < 0 : length <= index){ throw TypeError('Reduce of empty array with no initial value'); } } for(;isRight ? index >= 0 : length > index; index += i)if(index in O){ memo = callbackfn(memo, O[index], index, this); } return memo; }; }; ployfill は、reduce の実装に使用される createArrayReduce など、多くの新しいメソッドを Arrary に追加していることがわかります。 注 上記の 2 つのファイルを導入すると、基本的にブラウザの ES6 サポートのほとんどが解決されます。 ただし、繰り返しになりますが、変換ツールを使用する場合でも、実稼働環境で ES6 に対するブラウザーのサポートが低い多数の新機能を使用することはお勧めできません。結局のところ、これはオンライン変換後に実行されるため、効率は比較的低くなります。さらに、ES6 に対するブラウザのサポートが変更されると、これらの変換スクリプトも頻繁に更新する必要があり、その後のメンテナンスに影響を与えることは避けられません。 【関連する推奨事項: JavaScript ビデオ チュートリアル 、プログラミング ビデオ ] |
以上がすべてのブラウザが es6 をサポートするようになりましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。