Coder Social home page Coder Social logo

es6-features's Introduction

ES2015+ features

Just a collection of useful features that I tend to use on a daily basis. Hopefully this is useful for those who are learning Javascript or exploring some of the many new features of the ES2015+ (aka ES6) standard. Keep in mind, that I'm using the AirBnB style guide for my examples and as such, there are many other ways to go about doing what I'll be showing.

Javascript

Example code that goes along with the following descriptions can be found the es6 directory.

Variable Declarations

const and let are used in ES6 and are different from var because they are only block scope. This means that they are only hoisted to the top of the scope block in which they are declared. While at first glance, const and let may seem similar but the similarities they share end at them both being variable declarations. const is a declaration that many would call constant. This is a bit of a misnomer, because const doesn't necessarily mean that it is constant. const in Javascript means it can't be reassigned. A const variable is still mutable so objects or arrays can be changed. Primitives such as numbers though can't be modified. let functions much like var but it is again, scope blocked like const.

Arrow Functions

Arrow functions are useful to clean up code when using callback functions. They're also useful since they're a couple less keystrokes than using the function keyword. Another important feature of arrow functions is that they bind the context in which they are executed. This means that you can use in place of a bind in certain situations like in a React component's onClick method or similar. (See line 34 of App.jsx for an example in practice) Arrow functions also are different from function declarations in that they do not have access to the arguments object. Instead, when using arrow functions, you must use the rest (...) operator to allow access to all input parameters.

Destructuring

Destructuring objects and arrays is a technique that makes it more convenient to access the necessary properties for a function and assigning them to the same variable name. It can be used in function parameters or within a function.

const example = ({ key1, key2, key4 }) => {
  console.log(`Here are some values ${key1} ${key2} ${key4}`);
};

const example2 = (object) => {
  const { key1, key4 } = object;
  console.log(`Here are some values ${key1} ${key2}`);
};

Another feature of destructuring is also being able to rename the key to a new variable name if the key's name isn't adequate for your use case. To do that, you'll assign the value the label which you will use in your code instead of destructuring with the same name.

const example3 = (object) => {
  const { key1: name, key2: age } = object;
  console.log(`Object's name is ${name} and is ${age} years old.`);
};

Classes

Classes introduced in ES6 are syntactical sugar for prototypal inheritance. This makes it more akin to classes in other languages. The way that classes inherit from their parent class is by a method called extends. In addition, the super keyword must also be called in the constructor else the parent's functions will never be accessed. It is how those methods are called from the parent class.

Its important to note that class declarations are not hoisted like a function declaration such as a pseudoclassical constructor.

Template Literals

Template literals are used in place of string concatenation. At first, they may seem like more keystrokes to implement but it makes string concatenation clearer and easier to read. It uses a backtick (located under the tilde on most keyboards) and is not to be confused with a single quote.

const screename = 'andino93'
const string = screename + ' ' + 'made' + ' ' + 'this' + ' ' + 'readme.'
const template = `${screename} made this readme`

Rest and Spread Operators

Spread Operator

The spread operator enables the extraction of items in an iterable item to be access as single elements. It can be used on Arrays, Objects and even Strings.

Rest Operator

The rest operator is similar to a spread operator but it is used in function parameters. It allows the binding of multiple arguments into a single variable name which can be accessed as an array.

Asynchronous Code

Promises

A promise is a proxy for a value that is not necessarily known when the promise is created. The Promise object was introduced into Javascript in ES2015 but they were available using external libraries such as Bluebird or Q prior. Those libraries tend to have many more functions that are quite useful as well but I'll just cover the ES6 features that are available natively now.

Promises allow javascript to make asynchronous code useable in a synchronous way. When a Promise is created, it is awaited much like when using the callback pattern. The difference from the callback pattern is the Promise object has a method .then(), .catch(), and .finally() in place of the callback. .then() is invoked on success or fulfillment and .catch() is what captures errors. .finally() is run after everything else has already been worked through in the chain.

There also other methods that are useful for when you have more than one Promise to resolve. Promise.all() allows you wait for an array of Promises to return and Promise.race() awaits for the first promise to return.

MDN has a great breakdown of all the methods and some more examples than I have written as well. Link

async/await

React Client

The React folder has a client that an example of a real-world use of object destructuring and arrow function binding. Follow the setup instructions to see how it works or just take a look at the code in the React directory.

Setup

To get the sample React App running on your local machine, just follow the steps following.

  • npm install to get things all dependencies installed
  • npm run start:dev to start express server
  • Navigate to http://localhost:3000 to try example site

es6-features's People

Contributors

andino93 avatar janetlee avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.