IE8縛りの世界にいた時は、新しい言語仕様を覚えても使えないからとキャッチアップをしようとしてなかったことがあります。
この本を読みながら、動かしながら、少しでも追いついておきたいところです。
Node.jsでJavaScriptのコードを動かしてました。
constとlet
letは宣言の重複を防ぎ、ブロックスコープを有効にします。
またconstも追加されています。定数宣言です。JavaScriptも大分、カタイ言語にして行こうという意図に私は感じました。
べき乗演算子
console.log(2**3); // 8
Math.powを使わずともべき乗が可能になります。
余談ですが、C#には存在しません。最近、以下のツイートを見かけて思い出しました。
— 春条 (@harujoh) 2020年7月15日
バッククォートで囲んだテンプレート文字列
これは、あると便利です。
改行の文字列も宣言できますし、変数を埋め込むことも可能になります。
let str1 = `1. one 2. two 3. three`; console.log(str1); let name = 'rim'; console.log(`Hello,${name}`);
C#にもありますが、これがあるとないとでは全然言語の使い勝手が違ってきます。
Javaは、持っていないんですよね。Javaのこういうところがね……。
分割代入
配列要素を変数に割り当てることが出来ます。
言葉だけだとわかりにくいです。よくある変数同士の値の交換にも活用できます。
[a,b] = [1,2]; console.log(`a = ${a} , b = ${b}`); [a,b] = [b,a]; console.log(`a = ${a} , b = ${b}`);
引数リストの末尾のカンマを許容する
これ、エラーになるんじゃないの?と思ってしまう記法です。
正直、なんか気持ち悪いなあ、そんな記法しないでくれる? なんて老害発言してしまいそうな。
// a,bの後に末尾のカンマを入れてもいい function add(a,b,) { return a + b; } // 呼び出し時に末尾のカンマがあってもいい console.log(add(2,3,)); // 呼び出し時に末尾のカンマがなくてもいい console.log(add(4,5));
非同期処理を行うためのPromise
new Promise((resolve,reject) => { statements })
このPromiseクラスをthen().catch().finally()のチェーンメソッドで処理をしていきます。
- then 処理が成功した場合の処理
- catch 処理が失敗した場合の処理
- finally 処理の成否に関わらず、実行すべき完了処理
function promiseDivide(a,b) { return new Promise((resolve, reject) => { setInterval(() => { if (b == 0){ reject('cannot divide 0'); } resolve(a/b); },1000); }); } promiseDivide(2,0) .then(response => { console.log(`result ${response}`); }).catch(error => { console.log(`error ${error}`); }).finally(() => { console.log("End"); }); promiseDivide(4,2) .then(response => { console.log(`result ${response}`); }).catch(error => { console.log(`error ${error}`); }).finally(() => { console.log("End"); });
Promiseの性質にやや癖があるので、慣れが必要です。
また、async/awaitも存在しますが、C#の感覚とは違い、このPromiseをawaitで呼ぶのがasyncになります。
使い方はC#には近いですが、Promiseがベース。
まず、このPromiseに慣れることから始まりそうです。
Class
ES2015では、クラスも登場しています。
本家が、TypeScriptっぽくなってきましたね。
class Person { constructor(name,job) { this.name = name; this.job = job; } show() { console.log(`${this.name} is ${this.job}.`); } } let person = new Person("John","Backend Engineer"); person.show();