オライリーの『初めてのJavaScript 第3版』1 を読んだ。
JavaScript をよく分かっていなかったので、ECMAScript 2015 (ES6) を一通り体系的に学べて良かった。
JavaScript 本だとオライリーのサイ本こと『JavaScript 第6版』が有名だが、ES6 非対応なので、同じくオライリーで ES6 対応の『初めてのJavaScript 第3版』を読んだ。
以下、簡単にメモ。
- 全てはオブジェクト(キー・バリュー)
- メソッド:オブジェクトのプロパティとして指定される関数
- class 構文によりクラスベースの OOP が可能
- 内部的にはプロトタイプベース(プロトタイプチェーン)だが、コードを書く際はクラスベースのつもりで書けば良い
- class 構文は関数によるクラス定義のシンタックスシュガー
- 非同期処理は新しい順に async/await (ES7) → ジェネレータ (ES6) → Promise (ES6) → コールバック
- コールバックで複雑な非同期処理を実装するとコールバック地獄に
- 新しい構文により複雑な非同期処理をシンプルに書ける
- async/await が使える環境ならこれを使うのがベスト(?)
- ジェネレータは直感的に分かりにくい
'use strict';
でエラーチェックが厳しくなり goodtypeof null === 'object'
- メソッドの
function
と:
を省略可(ショートハンド)
const taro = { name: 'Taro Yamada', greet() { console.log('Hello!') } // greet: function() { console.log('Hello!') } と同じ }
- アロー関数(ラムダ式的なやつ)は this を束縛しない(語彙的に束縛する)
'use strict'; this.val = 'global'; const fGlobalDef = function() { console.log(this.val); }; // this は呼び出し元オブジェクト(e.g., obj1, obj2) const ArrowFGlobalDef = () => console.log(this.val); // this === { val: 'global' } const obj1 = { val: 'obj1', fMethod() { console.log(this.val); }, ArrowFMethod() { (() => console.log(this.val))(); }, // Arrow function's IIFE fGlobal: fGlobalDef, ArrowFGlobal: ArrowFGlobalDef } const obj2 = { val: 'obj2', fMethod() { console.log(this.val); }, ArrowFMethod() { (() => console.log(this.val))(); }, // Arrow function's IIFE fGlobal: fGlobalDef, ArrowFGlobal: ArrowFGlobalDef } obj1.fMethod(); // obj1 obj1.ArrowFMethod(); // obj1 obj1.fGlobal(); // obj1 obj1.ArrowFGlobal(); // global obj2.fMethod(); // obj2 obj2.ArrowFMethod(); // obj2 obj2.fGlobal(); // obj2 obj2.ArrowFGlobal(); // global // fGlobalDef() の this は呼び出し元オブジェクトになるため // obj1.fGlobal() の出力は「obj1」、obj2.fGlobal() の出力は「obj2」になる // ArrowFGlobalDef() の this は定義時のスコープでのオブジェクトになるため // obj1.ArrowFGlobal() と obj2.ArrowFGlobal() の出力はどちらも「global」になる
ちなみにこちらは未読だが、技術評論社の『改訂新版 JavaScript 本格入門』も似たコンセプトの本だと思う。
TypeScript などの AltJS や Vue.js などのフレームワークも勉強したいが、とりあえず次は『CSS3 開発者ガイド 第 2 版』2 で CSS をお勉強します。
-
Ethan Brown(2017)『初めてのJavaScript 第3版』武舎広幸・武舎るみ訳,オライリー・ジャパン,https://www.oreilly.co.jp/books/9784873117836/.↩
-
Peter Gasston(2015)『CSS3開発者ガイド 第2版』牧野聡訳,オライリー・ジャパン,https://www.oreilly.co.jp/books/9784873117256/.↩