ECMAScript は、ECMA International によって ECMA-262 を通じて標準化されたスクリプト プログラミング言語です。es6 の正式名は ECMAScript 6 で、ECMAScript の 6 番目のバージョンです。es5 の正式名は ECMAScript 5 で、これは ECMAScript の 6 番目のバージョンです。 ECMAScript の 5 番目のバージョン。
このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。
ECMAScript は、ECMA-262 を通じて Ecma International によって標準化されたスクリプト プログラミング言語です。この言語は World Wide Web で広く使用されており、JavaScript または JScript と呼ばれることが多いため、JavaScript の標準として理解できますが、実際には、後の 2 つは ECMA-262 標準の実装および拡張です。
ECMAScript の 5 番目のバージョン (4 番目のバージョンは複雑すぎるため廃止されました) として、ブラウザのサポートが最初の図で確認できます。追加された機能は次のとおりです。 。
1. strict モード
Strict モード、一部の使用を制限します、'use strict';
2. Array メソッドの追加
every、some、forEach、filter、indexOf、lastIndexOf、isArray、map、reduce、reduceRight メソッドを追加しました PS: 他にも Function.prototype.bind、String.prototype.trim、Date.now メソッドがあります
3. オブジェクト メソッド
Object.getPrototypeOf
Object.create
Object.getOwnPropertyNames
Object 。 defineProperty
Object.getOwnPropertyDescriptor
Object.defineProperties
Object.keys
Object.preventExtensions / Object.isExtensible
Object.seal / Object.isSealed
Object.freeze / Object.isFrozen
追記: それが何であるかではなく、そこにあるものについてのみ話してください。
ECMAScript6 は、下位互換性を確保しながら多数の新機能を提供します。現在のブラウザーの互換性は次のとおりです。 ES6 の機能は次のとおりです。
1. ブロック レベルのスコープ キーワード let、定数 const
2. オブジェクト リテラルのプロパティ値の省略表記
var obj = { // __proto__ __proto__: theProtoObj, // Shorthand for ‘handler: handler’ handler, // Method definitions toString() { // Super calls return "d " + super.toString(); }, // Computed (dynamic) property names [ 'prop_' + (() => 42)() ]: 42 };
3. 代入と構造化
let singer = { first: "Bob", last: "Dylan" }; let { first: f, last: l } = singer; // 相当于 f = "Bob", l = "Dylan" let [all, year, month, day] = /^(dddd)-(dd)-(dd)$/.exec("2015-10-25"); let [x, y] = [1, 2, 3]; // x = 1, y = 2
4. 関数パラメータ - デフォルト値、パラメータのパッケージ化、配列展開 (Default、Rest、Spread)
//Default function findArtist(name='lu', age='26') { ... } //Rest function f(x, ...y) { // y is an Array return x * y.length; } f(3, "hello", true) == 6 //Spread function f(x, y, z) { return x + y + z; } // Pass each elem of array as argument f(...[1,2,3]) == 6
5. アロー関数
(1). コード形式が簡素化され、デフォルトで式の結果が返されます。
(2). 関数定義時にセマンティック this、つまり this を自動的にバインドします。上記の例と同様に、これは forEach の無名関数パラメータで使用されます。
6. 文字列テンプレート テンプレート文字列
var name = "Bob", time = "today"; `Hello ${name}, how are you ${time}?` // return "Hello Bob, how are you today?"
7. イテレータ for..of イテレータには次のメソッドがあり、呼び出しは次のメソッドを返します。
(1). 反復オブジェクトの要素を返します: { 完了: false, 値: elem }
(2). 反復オブジェクトの終わりに到達した場合: { 完了: true、値: retVal }
for (var n of ['a','b','c']) { console.log(n); } // 打印a、b、c
8.Generators
9.Class
クラス、コンストラクタがあります。 extends と super ですが、本質的には糖衣構文です (言語の機能には影響しませんが、プログラマにとってはより便利です)。
class Artist { constructor(name) { this.name = name; } perform() { return this.name + " performs "; } } class Singer extends Artist { constructor(name, song) { super.constructor(name); this.song = song; } perform() { return super.perform() + "[" + this.song + "]"; } } let james = new Singer("Etta James", "At last"); james instanceof Artist; // true james instanceof Singer; // true james.perform(); // "Etta James performs [At last]"
10.モジュール
ES6 の組み込みモジュール関数は、CommonJS と AMD のそれぞれの利点を活用しています: (1). 合理化された構文とCommonJS の一意のエクスポート (単一エクスポート) と循環依存関係 (循環依存関係)。 (2). AMD と同様に、非同期ロードと構成可能なモジュールのロードをサポートします。
// lib/math.js export function sum(x, y) { return x + y; } export var pi = 3.141593; // app.js import * as math from "lib/math"; alert("2π = " + math.sum(math.pi, math.pi)); // otherApp.js import {sum, pi} from "lib/math"; alert("2π = " + sum(pi, pi)); Module Loaders: // Dynamic loading – ‘System’ is default loader System.import('lib/math').then(function(m) { alert("2π = " + m.sum(m.pi, m.pi)); }); // Directly manipulate module cache System.get('jquery'); System.set('jquery', Module({$: $})); // WARNING: not yet finalized
11.Map Set WeakMap WeakSet 4 つのコレクション タイプ 、プロパティ キーとしての WeakMap および WeakSet オブジェクトは、他の変数が参照していない場合、リサイクルされ、解放されます。
// Sets var s = new Set(); s.add("hello").add("goodbye").add("hello"); s.size === 2; s.has("hello") === true; // Maps var m = new Map(); m.set("hello", 42); m.set(s, 34); m.get(s) == 34; //WeakMap var wm = new WeakMap(); wm.set(s, { extra: 42 }); wm.size === undefined // Weak Sets var ws = new WeakSet(); ws.add({ data: 42 });//Because the added object has no other references, it will not be held in the set
12.Math Number String Array Object APIs いくつかの新しい API
Number.EPSILON Number.isInteger(Infinity) // false Number.isNaN("NaN") // false Math.acosh(3) // 1.762747174039086 Math.hypot(3, 4) // 5 Math.imul(Math.pow(2, 32) - 1, Math.pow(2, 32) - 2) // 2 "abcde".includes("cd") // true "abc".repeat(3) // "abcabcabc" Array.from(document.querySelectorAll('*')) // Returns a real Array Array.of(1, 2, 3) // Similar to new Array(...), but without special one-arg behavior [0, 0, 0].fill(7, 1) // [0,7,7] [1, 2, 3].find(x => x == 3) // 3 [1, 2, 3].findIndex(x => x == 2) // 1 [1, 2, 3, 4, 5].copyWithin(3, 0) // [1, 2, 3, 1, 2] ["a", "b", "c"].entries() // iterator [0, "a"], [1,"b"], [2,"c"] ["a", "b", "c"].keys() // iterator 0, 1, 2 ["a", "b", "c"].values() // iterator "a", "b", "c" Object.assign(Point, { origin: new Point(0,0) })
13. プロキシプロキシ (Proxy) を使用して操作を監視するオブジェクトの を選択すると、対応する処理を行うことができます。
var target = {}; var handler = { get: function (receiver, name) { return `Hello, ${name}!`; } }; var p = new Proxy(target, handler); p.world === 'Hello, world!';
監視できる操作: get、set、has、deleteProperty、apply、construct、getOwnPropertyDescriptor、defineProperty、getPrototypeOf、setPrototypeOf、enumerate、ownKeys、preventExtensions、isExtensible。
14.シンボル シンボルは基本的なタイプです。シンボルは、オプションの name パラメータを受け取るシンボル関数を呼び出すことによって生成されます。この関数によって返されるシンボルは一意です。
var key = Symbol("key"); var key2 = Symbol("key"); key == key2 //false
15.Promises
Promises は、非同期操作を処理するオブジェクトです。Promise オブジェクトを使用した後、チェーン コール メソッドを使用してコードを整理できます。コード より直感的 (jQuery の遅延オブジェクトに似ています)。
function fakeAjax(url) { return new Promise(function (resolve, reject) { // setTimeouts are for effect, typically we would handle XHR if (!url) { return setTimeout(reject, 1000); } return setTimeout(resolve, 1000); }); } // no url, promise rejected fakeAjax().then(function () { console.log('success'); },function () { console.log('fail'); });
ES6 については、ある意味 ES4 の失敗を繰り返し、さらに複雑になるのでしょうか? それとも数年後にはみんなの受け入れがさらに強まるかもしれませんし、そうあるべきだと私は思いますそれでおしまい。下位互換性があるので良いと思います。複雑な構文を知らなくても、使い慣れた方法を使用でき、提供される構文シュガーは非常に実用的です。この記事は少し長いのでここで終わりにします。この記事は、そこにあるものについて話すことを目的としており、ほとんどの内容をカバーする必要がありますが、詳細な分析はなく、一部の内容はオンライン資料から取得したものであるため、個別にリストすることはしません。
推奨学習: JS ビデオ チュートリアル
以上がes6 と es5 とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。