59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: ES6
 | |
| ---
 | |
| 
 | |
| ## ES6
 | |
| 
 | |
| The 6th edition of ECMAScript is called ES6. 
 | |
| 
 | |
| It is also know as ES2015. 
 | |
| 
 | |
| The changes add a lot of syntactic sugar that allow developers to create applications in an object oriented style. 
 | |
| 
 | |
| > ES5 example:
 | |
| 
 | |
| ```javascript
 | |
| var User = function () {
 | |
|   function User(name) {
 | |
|     this._name = name;
 | |
|   }
 | |
| 
 | |
|   User.prototype.getName = function getName(x) {
 | |
|     return 'Mr./Mrs. ' + this._name;
 | |
|   };
 | |
| 
 | |
|   return User;
 | |
| }();
 | |
| ```
 | |
| 
 | |
| > ES6 example:
 | |
| 
 | |
| ```javascript
 | |
| class User {
 | |
|   constructor(name) {
 | |
|     this._name = name
 | |
|   }
 | |
| 
 | |
|   getName() {
 | |
|     return `Mr./Mrs. ${this._name}`
 | |
|   }
 | |
| }
 | |
| ```
 | |
| 
 | |
| A lot of new syntax features were introduced including:
 | |
| 
 | |
| - classes,
 | |
| - modules,
 | |
| - templating,
 | |
| - for/of loops,
 | |
| - generator expressions,
 | |
| - arrow functions,
 | |
| - collections,
 | |
| - promises.
 | |
| 
 | |
| Nowadays most of the features are available in all popular browsers. The <a href='https://kangax.github.io/compat-table/es6/' target='_blank' rel='nofollow'>compatibility table</a> contains all information about feature availability of all modern browsers. 
 | |
| 
 | |
| Frequently new features arrive that are part of the successor ES7. A common way is to translate modern JavaScript (ES6, ES7 and other experimental proposals) to ES5. This makes sure that also old browsers can execute the code. There are tools like <a href='https://babeljs.io/' target='_blank' rel='nofollow'>Babel</a> that transforms new JavaScript to ES5.
 | |
| 
 | |
| Besides syntactic sugar coming from ECMAScript standards there are features that require a <a href='https://babeljs.io/docs/usage/polyfill' target='_blank' rel='nofollow'>Polyfill</a>. Usually they are necessary because whole class/method implementations were added to the standard.
 |