Bài viết này đang ra mắt nkhô hanh cho chính mình về ES6. Nếu chúng ta chưa chắc chắn ES6 là gì, thì nó là 1 phiên phiên bản new của Javascript. Nếu chúng ta là 1 trong kỹ sư phần mềm bận bịu (có ai lại không nhỉ?), hãy dành riêng thời hạn để học tập 10 hào kiệt tốt nhất có thể cầm cố hệ tiếp theo của ngôn ngữ lập trình phổ biến độc nhất vô nhị - JavaScript.
Bạn đang xem: Es6 là gì
Đây là list 10 tuấn kiệt cực tốt của ES6đến phần nhiều kỹ sư phần mềm bận rộn (thu xếp ngẫu nhiên):
Default Parameters in ES6Template Literals in ES6Multi-line String in ES6Destructuring Assignment in ES6Enhanced Object Literals in ES6Arrow Function in ES6Promises in ES6Block-Scoped Constructs Let và ContClasses in ES6Modules in ES6Chụ ý: Danh sách này mang ý nghĩa chủ quan. Nó ko nhằm mục tiêu khước từ sự có ích của các khả năng không giống vào ES6, dòng ko mở ra trong danh sách lý dođơn giản dễ dàng là tôi số lượng giới hạn trong 10 anh tài.
Thứ nhất,là một trong những chút ít về lịch sử hào hùng của JavaScript dành cho đông đảo ai chưa biết:
1995: JavaScript được thành lập và hoạt động với tên gọi LiveScript1997: Chuẩn ECMAScript được thành lập1999: ES3 Ra đời với IE5 là tất cả cơn thịnh nộ2000 - 2005: XMLHttpRequest cũng được nghe biết như AJAX, làm cho tăng thêm sự phổ cập của các ứng dụng như Outlook Web Access (2000) với Oddpost (2002), Gmail (2004), với Google Maps (2005).Vậy là đầy đủ về lịch sử hào hùng, tiếp theo hãy lưu ý code
1. Default Parameters in ES6
Chúng ta có những câu lệnh nhằm định nghĩa các tsay đắm số khoác định:
var link = function (height, color, url) Mọi thiết bị vẫn ổn cho tới Lúc cực hiếm là 0 với chính vì trong JavaScript 0là falsy cho nên nó vẫn mang định là quý giá mà họ hard-coded (50, "red", "http://azat.co"), chính vì thế bọn họ phải sử dụng giải pháp khác. Trong ES6, chúng ta có thể đặt cácquý giá mang định Khi knhị báo tđắm đuối số như vậy này:
var link = function(height = 50, color = "red", url = "http://azat.co") ...Cú pháp này tựa như Ruby!
2. Template Literals in ES6
Template Literals xuất xắc interpolation trong số ngôn từ khác là 1 trong những phương pháp hiển thị các đổi thay vào chuỗi. Trong ES5 chúng ta làm cho như vậy này:
var name = "Your name is " + first + " " + last + "."var url = "http://localhost:3000/api/messages/" + idMay mắn, vào ES6 chúng ta có thể sử dụng cú pháp new $NAME bên trong chuỗi:
var name = `Your name is $first $last.`var url = `http://localhost:3000/api/messages/$id`
3. Multi-line String in ES6
Một syntactic sugar khác là chuỗi có tương đối nhiều chiếc (multi-line string). Trong ES5, chúng ta có tác dụng như thế này:var roadPoem = "Then took the other, as just as fair, " + "And having perhaps the better claim " + "Because it was grassy và wanted wear, " + "Though as for that the passing there " + "Had worn them really about the same, "var fourAgreements = "You have the right to be you. You can only be you when you do your best."Trong ES6, chỉ việc áp dụng vết backticks:
var roadPoem = `Then took the other, as just as fair, And having perhaps the better claim Because it was grassy and wanted wear, Though as for that the passing there Had worn them really about the same,`var fourAgreements = `You have sầu the right to lớn be you. You can only be you when you bởi your best.`
4. Destructuring Assignment in ES6
Destructuring có thể là một trong định nghĩa khó gọi, hãy coi phxay gán dễ dàng này nơi các khóahousevàmouselà những biếnhousevàmouse:var data = $("body").data(), // data has properties house và mouse house = data.house, mouse = data.mouseMột ví dụ không giống của phnghiền gán destructuring (từ Node.js):
var jsonMiddleware = require("body-parser").jsonvar body toàn thân = req.body toàn thân, // body toàn thân has username và password username = toàn thân.username, password = toàn thân.password Trong ES6, chúng ta có thể thay thế sửa chữa code ES5 cùng với những câu lệnh:
var house, mouse = $("body").data() // we"ll get house and mouse variablesvar jsonMiddleware = require("body-parser")var username, password = req.bodyĐiều này cũng làm việc với mảng:
var
5. Enhanced Object Literals in ES6
Cái bạn cũng có thể làm cùng với object literals giờ vẫn cố gắng đổi! Chúng ta đi trường đoản cú phiên phiên bản của JSON trong ES5 tới một thiết bị gần giống class trong ES6.
Đây là một trong đối tượngnổi bật vào ES5 với cùng 1 vài thủ tục với thuộc tính:
var serviceBase = port: 3000, url: "azat.co", getAccounts = function()return <1,2,3>var accountServiceES5 = port: serviceBase.port, url: serviceBase.url, getAccounts: getAccounts, toString: function() return JSON.stringify(this.valueOf()) , getUrl: function() return "http://" + this.url + ":" + this.port, valueOf_1_2_3: getAccounts()Nếu mong muốn đẹp nhất, bạn có thể thừa kế trường đoản cú đối tượngseviceBasebằng phương pháp sản xuất protoype với cách làm Object.create:
var accountServiceES5ObjectCreate = Object.create(serviceBase)var accountServiceES5ObjectCreate = getAccounts: getAccounts, toString: function() return JSON.stringify(this.valueOf()) , getUrl: function() return "http://" + this.url + ":" + this.port, valueOf_1_2_3: getAccounts()Tôi biết, accountServiceES5ObjectCreate và accountServiceES5 không trọn vẹn tương tự nhau, chính vì một đối tượng người dùng (accountServiceES5) sẽ sở hữu được những ở trong tính trong đối tượng người dùng __proto__ nhỏng dưới đây:

Nhưng vị lợi ích của ví dụ, chúng ta vẫn coi chúng tựa như. Trong ES6 object literal, phép gán getAccounts: getAccounts, biến hóa chỉ getAccounts. Chúng ta tùy chỉnh protoype tức thì vào nằm trong tính __proto__:
var serviceBase = port: 3000, url: "azat.co", getAccounts = function()return <1,2,3>var accountService = __proto__: serviceBase, getAccounts,Vì nắm chúng ta có thể gọisuper và các khóa đụng (valueOf_1_2_3):
toString() return JSON.stringify((super.valueOf())) , getUrl() return "http://" + this.url + ":" + this.port, < "valueOf_" + getAccounts().join("_") >: getAccounts();console.log(accountService)

Đây là sự cải tiến tuyệt đối hoàn hảo đến object literals cũ!
6. Arrow Functions in ES6
Đây là nhân kiệt mà tôi mong chờ duy nhất. Tôi phù hợp CoffeeScript vì chưng fat arrows. Lúc bấy giờ bọn chúng bao gồm trong ES6. Fat arrow hoàn hảo nhất cũng chính vì bọn chúng tạo thành hành vi của trực thuộc tínhthis. Ví dụthissẽ có được thuộc quý hiếm cùng với bối cảnh (context)của hàm - nó không bị đổi khác. Thay đổithường xẩy ra các lần bạn chế tạo ra một closure.
Sử dụng arrow function vào ES6 cho phép chúng ta không phải thực hiện that = this hoặc self = this hoặc _this = this hoặc .bind(this). lấy ví dụ đó là một quãng code vào ES5:
var _this = this$(".btn").click(function(event) _this.sendData())Đây là code trong ES6 không có _this = this:
$(".btn").click((event) => this.sendData())Đáng buồn, ES6 quyết định rằng có skinny arrow là không ít thứ xuất sắc mang đến chúng ta và chúng ta đến bọn họ một hàm (function)cũ xộc xệch thay thế sửa chữa (Skinny arrow in CoffeeScript thao tác làm việc giống hệt như các hàm (function)thường thì trong ES5 với ES6).
Xem thêm: Hình Ảnh, Ý Nghĩa Các Biển Báo Giao Thông Tại Đường Bộ Tại Việt Nam
Đây là một trong ví dụ khác về phong thái họ sử dụngcallnhằm truyền bối cảnh (context) tới hàmlogUpperCase()vào ES5:
var logUpperCase = function() var _this = this this.string = this.string.toUpperCase() return function () return console.log(_this.string) logUpperCase.call( string: "es6 rocks" )()Trong ES6, bọn họ ko đề nghị áp dụng _this
var logUpperCase = function() this.string = this.string.toUpperCase() return () => console.log(this.string)logUpperCase.call( string: "es6 rocks" )()Chú ý rằng bạn có thể trộn với phối hợp hàm cũ cùng với => vào ES6 nhỏng bên trên. Và khi 1 arrow function được thực hiện với cùng 1 dòng lệnh, nó vươn lên là một biểu thức, ví dụ nó đã ám chỉ rằng return (return () => console.log(_this.string))công dụng của một câu lệnh. Nếu các bạn có tương đối nhiều rộng một dòng, các bạn sẽ buộc phải sử dụngreturnmột phương pháp ví dụ.
Đây là đoạn code chế tạo ra một mảng messages từ mảng ids:
var ids = <"5632953c4e345e145fdf2df8","563295464e345e145fdf2df9">var messages = ids.map(function (value) return "ID is " + value // explicit return);Trong ES6 đã trsinh hoạt thành:
var ids = <"5632953c4e345e145fdf2df8","563295464e345e145fdf2df9">var messages = ids.map(value => `ID is $value`) // implicit returnQuý khách hàng bao gồm thấy rằng tôi thực hiện string template? Một khả năng không giống từ CoffeeScript... tôi đam mê chúng!
Cặp ngoặc đơn () ko nên cho một tmê mệt số vào arrow function. Bạn yêu cầu bọn chúng lúc áp dụng nhiều hơn nữa một tsay mê số.
Trong ES5 hàm bao gồm một câu lệnh return rõ ràng:
var ids = <"5632953c4e345e145fdf2df8", "563295464e345e145fdf2df9">;var messages = ids.map(function (value, index, list) return "ID of " + index + " element is " + value + " " // explicit return);Còn đấy là phiên bản ES6 với cặp ngoặc đối kháng bao bọc các ttê mê số cùng câu lệnhreturnko rõ ràng:
var ids = <"5632953c4e345e145fdf2df8","563295464e345e145fdf2df9">var messages = ids.map((value, index, list) => `ID of $index element is $value `) // implicit return
7. Promises trong ES6
Promises là 1 trong chủ đề khiến tranh cãi xung đột. Có nhiều phiên bản promise với một chút không giống biệtvề cú pháp như: Q, Bluebird, deferred.js, avow, jquery deferred là 1 trong những vài ba ví dụ. Một sốtín đồ nói ko đề xuất promise và chỉ việc sử dụng async, generators, callbacks, ...May mắn là ngày nay đang có sẵn một chuẩnPromisetrong ES6.Hãy cẩn thận một ví dụ bất đồng hóa cùng với setTimeout():
setTimeout(function() console.log("Yay!"), 1000)Chúng ta rất có thể viết lại code trong ES6 cùng với Promise:
var wait1000 = new Promise(function(resolve, reject) setTimeout(resolve, 1000)).then(function() console.log("Yay!"))Hoặc cùng với arrow function:
var wait1000 = new Promise((resolve sầu, reject)=> setTimeout(resolve sầu, 1000)).then(()=> console.log("Yay!"))quý khách hàng rất có thể thấy số mẫu code tăng từ bỏ 3 lên 5 nhưng mà không rõ ích lợi củaPromise.Đúng vậy. Lợi ích đang cụ thể ví như có rất nhiều khối hận lệnh ngắn gọn xúc tích lồng vào hàm setTimeout():
setTimeout(function() console.log("Yay!") setTimeout(function() console.log("Wheeyee!") , 1000), 1000)Đoạn code trên có thể viết lại vào ES6 cùng với promise:
var wait1000 = ()=> new Promise((resolve sầu, reject)=> setTimeout(resolve sầu, 1000))wait1000() .then(function() console.log("Yay!") return wait1000() ) .then(function() console.log("Wheeyee!") );Quý khách hàng vẫn chưa bị tmáu phục rằngPromisestốt hơn các hàm callback thông thường? Tôi cũng vậy. Tôi cho là một khi bạn có ý tưởng phát minh thực hiện callbachồng và suy xét cẩn trọng về chúng thì ko bắt buộc thêm sự phức hợp của promise.
Tuy nhiên, ES6 cóPromiseslà giành cho đa số ai mếm mộ chúng. Promise bao gồm tác dụng bổ ích làcatch lỗi mang lại tất cả những hàm callbaông chồng. quý khách có thể đọc thêm bài viết này để hiểu nhiều hơn nữa vềpromise:Giới thiệu Promise trong ES6.