58
JavaScript in 2017 Tiberiu Covaci

JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

  • Upload
    dangnhi

  • View
    221

  • Download
    1

Embed Size (px)

Citation preview

Page 1: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

JavaScript in 2017Tiberiu Covaci

Page 2: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Who am I?

Tiberiu ’Tibi’ Covaci

Software engineer, 25 years experience

CTO for DevMasters

MCT since 2004, teaching web technologies

MVP and ASP.NET Insider

Aurelia core team member

Telerik MVP & Insider

Geek

@tibor19

Page 3: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Agenda

History

Scope, Let, Const

Destructuring

Modules

Arrow functions

Classes

String concatenation

Iterators and Generators

Promises

TypeScript

Page 4: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

History

Page 5: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Why The Excitement?

▪ First substantial addition to JavaScript since inception

19931.0

19982.0

19993.0

20095.0

20156.0

Page 6: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Scope, Let, Const

Page 7: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem

▪ JavaScript has no block scope

Page 8: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: let

Page 9: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem

▪ All variables are mutable

=4

Page 10: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: const

Page 11: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Destructuring

Page 12: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Destructuring

▪ The opposite of constructing is destructing

Page 13: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Destructuring Objects

Page 14: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: Modularity & Scope

Page 15: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: Modularity & Scope

▪ Possible solutions

Common JS

Asynchronous Module Definitions

IFFE and Globals

▪ Think about how current libraries from 2014 are

designed

jQuery -> $

Angular -> angular

Lodash -> _

Page 16: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: Real Modules!

▪ Think “module” not “file”

Page 17: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Imports

Page 18: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Multiple Exports

Page 19: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Parameters

Page 20: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: Default Values

▪ Default are buried in the function code

Page 21: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: Default Parameter Values

Page 22: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: Variable Number

of Arguments

▪ Syntax is not obvious to the consumer

Page 23: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: Rest Parameters

▪ Let the last parameter take the rest of the arguments

Page 24: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Spread Operator

▪ Spread an array across the parameters

Page 25: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Arrow functions

Page 26: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: function is an 8

character word

Page 27: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Arrow Functions

▪ Expressive syntax

▪ Familiar to C# developers

Page 28: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

LINQish Arrows

Page 29: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Arrow Functions Lexically

Bind this

Page 30: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

String concatenations

Page 31: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: String

Concatenation Is Unpleasant

Page 32: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: String Templates

Page 33: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Classes

Page 34: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: Simulating OOP

Page 35: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: class Keyword

Page 36: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Inheritance

Page 37: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: Encapsulating

Collections

Page 38: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: Iterators and Iterables

Page 39: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

for of

Page 40: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Symbol

▪ A new type where every value is unique and

immutable

▪ Can use a symbol as a key into an object

Page 41: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Symbol.iterator

▪ A magic method that makes an object iterable

Page 42: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Make Your Own Iterable

Page 43: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Generators

Page 44: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Easy To Make Iterables

Page 45: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Promises

Page 46: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Problem: Async Code

http://tritarget.org/blog/2012/11/28/the-pyramid-of-doom-a-javascript-style-trap/

Page 47: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Solution: Promises

Page 48: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Promises Chain

Page 49: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Decorators

▪ @ symbol followed by a function

▪ Function can modify

A class

A property

A method

A parameter

Page 50: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

TypeScript

▪ Designed by Microsoft

Anders Heilsberg

▪ Open Source

https://github.com/Microsoft/TypeScript

▪ Superset of JavaScript

Adds optional types and interfaces

Page 51: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Type Annotations

▪ Declare the intended type of a variable

Default is “any”

boolean, number, string, Array, enum, void

Page 52: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Types and Functions

▪ Parameters can be typed

▪ Return value can also be typed

Often can be inferred

Page 53: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Interfaces

▪ Focus on the shape

Allows for duck typing

Can use optional properties

Can also describe functions

Page 54: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Public and Private

▪ Public is the default

Compiler enforces private keyword

Page 55: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Functions

▪ Can have return types, optional and default

parameters

Page 56: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Generics

▪ Use generic types to parameterize a function or class

Generic constraints can make type programmable

Page 57: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Declaration Files

▪ .d.ts files provide type metadata for 3rd parties

Page 58: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE

Summary

▪ ES2015 is a new language

Classes, arrow functions, generators, and more

▪ TypeScript adds optional type annotations

Types are structural

Type annotations useful for tooling and compile time

checks