えー、GWひとりもくもく会開催中です。
まだReactまでたどり着けていないのですが、お友達に教えてもらったこの本が素晴らしい!
https://oukayuka.booth.pm/items/1312652
ES2018の解説がわかりやすい!(ES2018の章まで実践した!)
https://qiita.com/shibukawa/items/19ab5c381bbb2e09d0d9
↑この記事と併用してお勉強中です。
もくじ[表示]
ES2018
ES6も含めおさらい。
変数宣言
- varは使わない(禁止レベル)(関数スコープ)
- var で定義された変数のスコープは関数単位、制御文のブロックはすり抜ける
- 多数の言語の変数スコープはブロック単位なので、そのテイでvar使うと危険
- 代入不要なものは const 使う(ブロックスコープ)
- どうしても再代入が必要な場合は let を使う(ブロックスコープ)
アロー関数
- function宣言とアロー式ではthisの挙動が異なる
- functionは、すぐ前のオブジェクト、オブジェクトがない場合グローバルオブジェクトがthisになる、アロー関数はそれ自身がthisになる
- functionは切り捨てましょう(闇に葬る)
// ダメ例 function name(引数) { 本体 } // こっち使う const name = (引数) => { 本体 };
関数にデフォルト引数が使える
const sampleFunc = (n = 0) => n + 1;
オブジェクトにもデフォルトを設定して似たようなことができる
const thinking = { name: "Mikke", mind: "GoLangと戯れたい", reason: "`so` だから" }; const { name="我輩", mind, reason } = thinking; console.log(`${name}は${reason} ${mind}です`);
$ node collection.js Mikkeは`so` だから GoLangと戯れたいです
ショートハンド
const foo = 12345; const obj = { foo, bar:678 }; console.log(obj);
$ node shorthand.js { foo: 12345, bar: 678 }
クラスの継承
- コンストラクタは継承されないので、継承したら明示的にコンストラクタを書く必要がある
Template literals - テンプレートリテラル
- 文字列を"とか' ではなく ` で ${変数名}をくくると、値を展開してくれる
- +で結合とか古い・・
Destructuring Assignment - 分割代入
const [n, m] = [1, 2]; console.log(n, m); const obj = { name: 'Mikke', hight:141 }; const { name, hight } = obj; console.log(name, hight);
Reactのばあい、 const name = obj.nameってやるとエラー
スプレッド演算子
const ary1 = ['A','B','C']; const ary2 = [...ary1, 'D','E']; console.log(ary2); const obj1 = {a:1, b:2, c:3}; const obj2 = {...obj1, d:4,e:5}; console.log(obj2);
$ node collection.js [ 'A', 'B', 'C', 'D', 'E' ] { a: 1, b: 2, c: 3, d: 4, e: 5 }
非同期処理
JSは前の処理待たずに次へ進んじゃう
const greeting = am => { setTimeout(() => { console.log('起きましょう') }, am); }; const greet = () => { console.log('おやすみね?'); greeting(2000); console.log('おはお'); }; greet();
$ node sync-test.js おやすみね? おはお 起きましょう
起きましょう、おはお、の順で実行されたいの〜
非同期処理 - Promises構文
const sleep = am => new Promise(resolve => setTimeout(resolve, am)); const greet = () => { console.log('おやすみね?'); //greeting(2000); sleep(2000) .then(() => { console.log('起きましょう'); console.log('おはお'); }) .catch(err => { console.error('error!:', err); }) }; greet();
$ node sync-test.js おやすみね? 起きましょう おはお
Promise関数の書き方がいまいちわからん。。
非同期処理 - async/await(エイシンク・アウェイト)
const sleep = am => new Promise(resolve => setTimeout(resolve, am)); const greet = async () => { console.log('おやすみね?'); //greeting(2000); try { await sleep(2000); console.log('起きましょう'); console.log('おはお'); } catch (err) { console.error('error!:', err); } }; greet();
$ node sync-test.js おやすみね? 起きましょう おはお
疲れた〜。GW前半終了しちゃう〜・・GOもやりたい〜