摘要:是一項標準,于年月獲得批準。靜態(tài)限制在分配之前阻止使用。使用通用到基于自定義迭代器的迭代。迭代基于這些鴨子類型接口僅使用類型語法進行展示生成器生成器使用和簡化迭代器。生成器是迭代器的子類型,包括額外的和。
ECMAScript 2015是一項ECMAScript標準,于2015年6月獲得批準。
ES2015是該語言的重要更新,也是自2009年ES5標準化以來該語言的第一次重大更新。現(xiàn)在正在主要JavaScript引擎中實現(xiàn)這些功能。
有關(guān) ECMAScript 2015語言的完整規(guī)范,請參閱ES2015標準。以下簡要介紹僅供參考。
箭頭函數(shù)和this箭頭函數(shù)是使用=>語法的函數(shù)簡寫。它們在語法上類似于C#,Java 8和CoffeeScript中的相關(guān)功能。它們支持表達式和語句體。與函數(shù)不同,箭頭函數(shù)與this周圍的代碼擁有相同的作用域。如果箭頭函數(shù)在另一個函數(shù)內(nèi),它共享其父函數(shù)的“arguments”變量。
// Expression bodies var odds = evens.map(v => v + 1); var nums = evens.map((v, i) => v + i); // Statement bodies nums.forEach(v => { if (v % 5 === 0) fives.push(v); }); // Lexical this var bob = { _name: "Bob", _friends: [], printFriends() { this._friends.forEach(f => console.log(this._name + " knows " + f)); } }; // Lexical arguments function square() { let example = () => { let numbers = []; for (let number of arguments) { numbers.push(number * number); } return numbers; }; return example(); } square(2, 4, 7.5, 8, 11.5, 21); // returns: [4, 16, 56.25, 64, 132.25, 441]類
ES2015類比基于原型的OO模式簡單。擁有一個方便的聲明形式使類模式更易于使用,并鼓勵互操作性。類支持基于原型的繼承,super調(diào)用,實例和靜態(tài)方法以及構(gòu)造函數(shù)。
class SkinnedMesh extends THREE.Mesh { constructor(geometry, materials) { super(geometry, materials); this.idMatrix = SkinnedMesh.defaultMatrix(); this.bones = []; this.boneMatrices = []; //... } update(camera) { //... super.update(); } static defaultMatrix() { return new THREE.Matrix4(); } }增強的對象字面量
擴展了對象字面量,以支持在構(gòu)造時設(shè)置原型,為foo: foo分配提供簡寫,定義方法和進行super調(diào)用。它們一起使對象字面量和類聲明更加緊密,讓基于對象的設(shè)計更方便。
var obj = { // Sets the prototype. "__proto__" or "__proto__" would also work. __proto__: theProtoObj, // Computed property name does not set prototype or trigger early error for // duplicate __proto__ properties. ["__proto__"]: somethingElse, // Shorthand for ‘handler: handler’ handler, // Methods toString() { // Super calls return "d " + super.toString(); }, // Computed (dynamic) property names [ "prop_" + (() => 42)() ]: 42 };
該__proto__屬性需要原生支持,并且在之前的ECMAScript版本中已棄用。大多數(shù)引擎現(xiàn)在支持該屬性,但有些則不支持。
模板字符串模板字符串為構(gòu)造字符串提供語法糖。這類似于Perl,Python等中的字符串插值功能。可選的,可以添加標簽以允許定制字符串構(gòu)造,避免注入攻擊或從字符串內(nèi)容構(gòu)造更高級別的數(shù)據(jù)結(jié)構(gòu)。
// Basic literal string creation `This is a pretty little template string.` // Multiline strings `In ES5 this is not legal.` // Interpolate variable bindings var name = "Bob", time = "today"; `Hello ${name}, how are you ${time}?` // Unescaped template strings String.raw`In ES5 " " is a line-feed.` // Construct an HTTP request prefix is used to interpret the replacements and construction GET`http://foo.org/bar?a=${a}&b=${b} Content-Type: application/json X-Credentials: ${credentials} { "foo": ${foo}, "bar": ${bar}}`(myOnReadyStateChangeHandler);解構(gòu)
解構(gòu)允許使用模式匹配進行綁定,并支持匹配數(shù)組和對象。類似于標準對象查找foo["bar"],在未找到時產(chǎn)生值undefined。
// list matching var [a, ,b] = [1,2,3]; a === 1; b === 3; // object matching var { op: a, lhs: { op: b }, rhs: c } = getASTNode() // object matching shorthand // binds `op`, `lhs` and `rhs` in scope var {op, lhs, rhs} = getASTNode() // Can be used in parameter position function g({name: x}) { console.log(x); } g({name: 5}) // Fail-soft destructuring var [a] = []; a === undefined; // Fail-soft destructuring with defaults var [a = 1] = []; a === 1; // Destructuring + defaults arguments function r({x, y, w = 10, h = 10}) { return x + y + w + h; } r({x:1, y:2}) === 23默認參數(shù)+對象展開符+對象收歸符
被調(diào)用者的默認參數(shù)值。在函數(shù)調(diào)用中將數(shù)組轉(zhuǎn)換為連續(xù)的參數(shù)。將跟隨參數(shù)綁定到數(shù)組。Rest arguments更直接地滿足了對常見情況的需求。
function f(x, y=12) { // y is 12 if not passed (or passed as undefined) return x + y; } f(3) == 15 function f(x, ...y) { // y is an Array return x * y.length; } f(3, "hello", true) == 6 function f(x, y, z) { return x + y + z; } // Pass each elem of array as argument f(...[1,2,3]) == 6塊級作用域let和const
塊范圍的綁定構(gòu)造。let是新的var,const是單一任務(wù)。靜態(tài)限制在分配之前阻止使用。
function f() { { let x; { // this is ok since it"s a block scoped name const x = "sneaky"; // error, was just defined with `const` above x = "foo"; } // this is ok since it was declared with `let` x = "bar"; // error, already declared above in this block let x = "inner"; } }迭代器+ For..Of
Iterator對象支持自定義迭代,如CLR IEnumerable或Java Iterable。使用通用for..in到基于自定義迭代器的迭代 for..of。不需要實現(xiàn)數(shù)組,啟用LINQ等惰性設(shè)計模式。
let fibonacci = { [Symbol.iterator]() { let pre = 0, cur = 1; return { next() { [pre, cur] = [cur, pre + cur]; return { done: false, value: cur } } } } } for (var n of fibonacci) { // truncate the sequence at 1000 if (n > 1000) break; console.log(n); }
迭代基于這些duck-typed(鴨子類型)接口(僅使用 TypeScript類型語法進行展示):
interface IteratorResult { done: boolean; value: any; } interface Iterator { next(): IteratorResult; } interface Iterable { [Symbol.iterator](): Iterator }生成器Generators
生成器使用function*和簡化迭代器yield。聲明為function *的函數(shù)返回Generator實例。生成器是迭代器的子類型,包括額外的next和throw。這些使得值能夠流回到生成器中,因此yield表達式形式返回一個值(或拋出)。
注意:也可用于啟用"await"式異步編程,另請參閱ES7 await 提議。
var fibonacci = { [Symbol.iterator]: function*() { var pre = 0, cur = 1; for (;;) { var temp = pre; pre = cur; cur += temp; yield cur; } } } for (var n of fibonacci) { // truncate the sequence at 1000 if (n > 1000) break; console.log(n); }
生成器接口是(僅使用TypeScript類型語法進行展示):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any); }Unicode支持
支持完整Unicode的非破壞性添加,包括字符串中的新unicode文字形式和u處理代碼點的新RegExp模式,以及用于處理21位代碼點級別的字符串的新API。這些新增功能支持在JavaScript中構(gòu)建全局應(yīng)用程序。
// same as ES5.1 "
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106964.html
摘要:從版本開始,不再單獨發(fā)布或者版本了,有需要的可以自己通過去定制官方解讀官方細項解讀穩(wěn)步推進系列六的小試牛刀一文讀懂的為何如此高效棄用引擎 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序 本文主要講述一下Java11的新...
摘要:需要注意的是必須要使用版本為以上才支持屬性。與格式文件不同,正對不同的,無法在一個文件設(shè)置,官方采用命名形式為格式來達成一樣的效果。采用方式添加的是屬于額外激活的,也就是說覆蓋掉外部傳入的指定的。 showImg(https://segmentfault.com/img/remote/1460000019924197?w=1050&h=500); Spring Boot Profile...
摘要:重大更新亮點解讀月日對來說是個特別的日子不僅是項目四周年紀念日,也是經(jīng)過了一年密集開發(fā)之后發(fā)布內(nèi)測版的日子。是一次重大更新,幾乎涉及每行代碼。 Bootstrap 4重大更新、亮點解讀 8月19日對Bootstrap來說是個特別的日子——不僅是項目四周年紀念日,也是經(jīng)過了一年密集開發(fā)之后發(fā)布Bootstrap 4內(nèi)測版的日子。Bootstrap 4是一次重大更新,幾乎涉及每行代碼。 新...
摘要:重大更新亮點解讀月日對來說是個特別的日子不僅是項目四周年紀念日,也是經(jīng)過了一年密集開發(fā)之后發(fā)布內(nèi)測版的日子。是一次重大更新,幾乎涉及每行代碼。 Bootstrap 4重大更新、亮點解讀 8月19日對Bootstrap來說是個特別的日子——不僅是項目四周年紀念日,也是經(jīng)過了一年密集開發(fā)之后發(fā)布Bootstrap 4內(nèi)測版的日子。Bootstrap 4是一次重大更新,幾乎涉及每行代碼。 新...
閱讀 1458·2021-11-24 09:39
閱讀 1774·2021-11-22 15:25
閱讀 3728·2021-11-19 09:40
閱讀 3283·2021-09-22 15:31
閱讀 1287·2021-07-29 13:49
閱讀 1192·2019-08-26 11:59
閱讀 1307·2019-08-26 11:39
閱讀 919·2019-08-26 11:00