From 238e8d47c419be01303f1163c7313387d7f339ab Mon Sep 17 00:00:00 2001 From: Charles-Axel Dein Date: Fri, 24 Jul 2020 18:03:15 +0200 Subject: [PATCH] Improve course --- training/front-end/01-modern-javascript.md | 77 +++++++++++++++++-- training/front-end/img/js-the-good-parts.jpg | Bin 0 -> 30423 bytes 2 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 training/front-end/img/js-the-good-parts.jpg diff --git a/training/front-end/01-modern-javascript.md b/training/front-end/01-modern-javascript.md index 6d8352b..9d5a898 100644 --- a/training/front-end/01-modern-javascript.md +++ b/training/front-end/01-modern-javascript.md @@ -40,7 +40,6 @@ - [Other features](#other-features) - [Optional chaining](#optional-chaining) - [Self assessment](#self-assessment) - - [References](#references) @@ -64,8 +63,8 @@ This course assumes you already have experience with JavaScript. If you don't, s ### Check your knowledge of JS -- What are the 5 JS datatypes? - - `Number`, `String`, `Boolean`, `Object`, `Undefined` +- What are the main JS datatypes? + - `Number`, `String`, `Boolean`, `Object`, `Undefined`, `BigInt` - What does `1 / "a"` evaluate to? - `NaN` @@ -106,6 +105,25 @@ Use [caniuse](https://caniuse.com/) to check what browser support the feature yo You can then use "polyfills" (or "shims") to support older browser. There are some polyfills for each specific feature, and some other that includes lots of polyfills (e.g. [zloirock/core-js](https://github.com/zloirock/core-js#ecmascript-array)). +Polyfills are different from transpiling. Babel is a transpiler, you +can see how it work online here: + +For instance, it will translate: + +```javascript +[1, 2, 3].map((n) => n + 1) +``` + +Into: + +```javascript +"use strict"; + +[1, 2, 3].map(function (n) { + return n + 1; +}); +``` + ### Undefined everywhere! ```javascript @@ -175,6 +193,17 @@ dog + 1 + "a" dog - 1 ``` +Other gotchas: + +```javascript +// NaN is fun! +console.assert(typeof NaN === "number"); +Object.is(NaN, NaN) // true +NaN === NaN // false +``` + +A good talk on the topic: [Wat](https://www.destroyallsoftware.com/talks/wat) + #### Always use triple comparators (`===`) instead of double (`==`) ```javascript @@ -219,6 +248,9 @@ const source = { b: 2}; const merged = Object.assign(target, source); console.assert(_.isEqual(merged, {a: 1, b:2}); +// Spread operator +const merge2 = {...target, ...source}; + // Array.includes (ES7) const theArray = [1, 2] console.assert(theArray.includes(1)) @@ -234,6 +266,8 @@ The book [JavaScript: The Good Parts](https://www.oreilly.com/library/view/javas > You make prototype objects, and then … make new instances. Objects are mutable in JavaScript, so we can augment the new instances, giving them new fields and methods. These can then act as prototypes for even newer objects. We don't need classes to make lots of similar objects… Objects inherit from objects. What could be more object oriented than that? +![JavaScript: the good parts](./img/js-the-good-parts.jpg) + Some good articles: - [A Plain English Guide to JavaScript Prototypes](http://sporto.github.io/blog/2013/02/22/a-plain-english-guide-to-javascript-prototypes/) @@ -519,6 +553,31 @@ const result = templateTag`hello ${1 + 2}`; console.assert(result === "hello 3"); ``` +Here's an example with Styled Components: + +```javascript +const Button = styled.a` + /* This renders the buttons above... Edit me! */ + display: inline-block; + border-radius: 3px; + padding: 0.5rem 0; + margin: 0.5rem 1rem; + width: 11rem; + background: transparent; + color: white; + border: 2px solid white; + + /* The GitHub button is a primary button + * edit this to target it specifically! */ + ${props => props.primary && css` + background: white; + color: black; + `} +` +``` + +You can see how template tags and arrow functions lead to more concise code! + ## Loops ### `for... of` @@ -642,18 +701,22 @@ let nestedProp = obj.first?.second; - Is it a modern language? - Can we say that JavaScript does not have types? - What is the value of this expression: `"1" + "1"`? `3 + 2 + "5"`? -- What should I use? `let`, `var`, or `cost`? +- What should I use? `let`, `var`, or `const`? - How do you add support for modern JS features in older browsers? - How are variables scoped in JavaScript? - What should you watch for when comparing variables in JavaScript? -- `const a = [1]; const b = [1];`: what does `b == b` evaluates to? +- `const a = [1]; const b = [1];`: what does `a == b` evaluates to? - How do you write arrow functions? - `const {a} = {a: 1}`: what does `a` evaluate to? Advanced: -- How does JavaScript "inherit" from each other? -- If `const toaster = {name: 'Foo'}` and I want `const obj = {Foo: 1}`. How can I write this whatever the `toaster`'s `name`? +- How does JavaScript objects "inherit" from each other? + +```javascript +// Write transform1 using a one-line arrow function with object structuring +console.assert(_.isEqual(transform1({name: "Foo"}), {FooA:1})) +console.assert(_.isEqual(transform1({name: "Bar"}), {Bar:1})) Other assessments: diff --git a/training/front-end/img/js-the-good-parts.jpg b/training/front-end/img/js-the-good-parts.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ad06060edcdb6930fff2d2354c229b4c9bd4c25 GIT binary patch literal 30423 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 literal 0 HcmV?d00001