We expect cooperation from all participants to help ensure a safe environment for everybody.
We treat everyone with respect, we refrain from using offensive language and imagery, and we encourage to report any derogatory or offensive behavior to a member of the JSLeague community.
We provide a fantastic environment for everyone to learn and share skills regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, religion (or lack thereof), or technology choices.
We value your attendance and your participation in the JSLeague community and expect everyone to accord to the community Code of Conduct at all JSLeague workshops and other events.
Code of conduct
Whoami
Sabin Marcu
Senior Software Engineer @ Hootsuite
Been working in web since '09
React Dev since 2015
React, GraphQL trainer @ JSLeague
Basic concepts of JS
JavaScript Beyond the Basics
JavaScript Beyond the Basics
primitives
objects
JavaScript Beyond the Basics
is the process of converting value from one type to another (such as string to number, object to boolean, and so on).
End result of coercion will always be either a string, a number or a boolean value
JavaScript Beyond the Basics
Number("5")
String(true)
Boolean(31)
5 + "3"
true + false
"6" - 1
JavaScript Beyond the Basics
JavaScript Beyond the Basics
false, 0, "", null, undefined, NaN
Scope and "this"
JavaScript Beyond the Basics
JavaScript Beyond the Basics
global
function
block
JavaScript Beyond the Basics
*unless strict mode
browser == window
node == global
call, apply
bind
arrow function
Destructuring, spread, rest
JavaScript Beyond the Basics
JavaScript Beyond the Basics
breaking down objects and arrays
into named variables
JavaScript Beyond the Basics
aggregation of remaining params
into a single variable
JavaScript Beyond the Basics
unpacking (or expanding)
iterable collections
Arrow functions
JavaScript Beyond the Basics
JavaScript Beyond the Basics
lexical this
cannot be used as constructors
(param1, param2, …, paramN) => { statements }
shorter syntax
no arguments
JavaScript Beyond the Basics
ARTICLE = { ID, TITLE, CONTENT }
const titles = articles.map(function (article) {
return article.title;
});
ARTICLE = { ID, TITLE, CONTENT }
const titles = articles.map(article => {
return article.title;
});
ARTICLE = { ID, TITLE, CONTENT }
const titles = articles.map(article => article.title);
Template literals
JavaScript Beyond the Basics
JavaScript Beyond the Basics
string interpolation
multiline
Callbacks, promises, async
JavaScript Beyond the Basics
JavaScript Beyond the Basics
a function that is triggered
and resolved
at the end of another function
JavaScript Beyond the Basics
a fulfillment of an already started action ending in a resolve or failure
JavaScript Beyond the Basics
similar to promise
but now its called async*
*also now it actually looks like js code
JavaScript Beyond the Basics
function inception
Classes
JavaScript Beyond the Basics
JavaScript Beyond the Basics
es5
var Person = function(fname, lname) {
this.fname = fname;
this.lname = lname;
}
Person.prototype.getFullName = function() {
return this.fname + " " + this.lname;
}
es6
class Person {
constructor(fname, lname) {
this.fname = fname;
this.lname = lname;
}
getFullName() {
return `${this.fname} ${this.lname}`
}
}
JavaScript Beyond the Basics
Functional programming
JavaScript Beyond the Basics
JavaScript Beyond the Basics
Prototypal Inheritance
Functional Programming
JavaScript Beyond the Basics
Pure functions
Function composition
Avoid shared state
Avoid mutating state
Avoid side effects
JavaScript Beyond the Basics
implements pattern input-output
given same input, has same output
no side-effects
JavaScript Beyond the Basics
combine multiple functions to result one
no shared state
high reusability
JavaScript Beyond the Basics
Avoid shared state
Avoid mutating state
Avoid side effects
Set and Map
JavaScript Beyond the Basics
JavaScript Beyond the Basics
Map is a collection of keyed data items, just like an Object. But the main difference is that Map allows keys of any type.
JavaScript Beyond the Basics
A Set is a special type collection – “set of values” (without keys), where each value may occur only once.
Iterators: generators, for...loops
JavaScript Beyond the Basics
JavaScript Beyond the Basics
functions that behave as iterators
declared using function*
does not return values, yields them
can create iterators out of anything
JavaScript Beyond the Basics
JavaScript Beyond the Basics
iterate over values
iterate over keys
for...in
for...of
JavaScript Beyond the Basics
evaluating stuff that doesn't exist (yet)
ES modules
JavaScript Beyond the Basics
JavaScript Beyond the Basics
es5
// enums/numbers.js
var Numbers = {};
Numbers.ONE = 1;
Numbers.TWO = 2;
Numbers.THREE = 1;
Numbers.FOUR = 2;
// app.js
var EnumNumbers = {};
EnumNumbers.ONE = Numbers.ONE;
EnumNumbers.TWO = Numbers.TWO;
es6
// enums/numbers.js
export {
ONE: 1,
TWO: 2,
THREE: 3,
FOUR: 4
}
// app.js
import {
ONE,
TWO
} from "enums/numbers.js"
Observables
JavaScript Beyond the Basics
JavaScript Beyond the Basics
asynchronous turned into streams
Error handling & debugging
JavaScript Beyond the Basics
JavaScript Beyond the Basics
always use throw new Error as it provides stacktrace
throwing errors in async returns the actual error
JavaScript Beyond the Basics
class ValidationError extends Error {
constructor(message) {
super(message)
this.name = 'ValidationError'
this.message = message
}
}
class PermissionError extends Error {
constructor(message) {
super(message)
this.name = 'PermissionError'
this.message = message
}
}
class DatabaseError extends Error {
constructor(message) {
super(message)
this.name = 'DatabaseError'
this.message = message
}
}
module.exports = {
ValidationError,
PermissionError,
DatabaseError
}
const {
ValidationError
} = require('./error')
function myFunction(input) {
if (!input)
throw new ValidationError(
'A validation error'
)
return input
}
new class based
error approach
Q&A
JavaScript Beyond the Basics