えー、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もやりたい〜
