Front-end Developer Handbookを教科書にフロントエンド周りの技術を習得する連載。
JavaScriptについて学ぶの説明です。
JavaScriptについて学ぶ
JavaScriptは高水準、動的、動的型付け、インタプリタ型のプログラム言語です。
またECMAScript言語仕様にて標準化されています。
HTMLやCSSと共に、Webコンテンツ制作に必要な3つの技術の内の1つで、大体のWebサイトが採用しており、全てのモダンブラウザではプラグイン無しでサポートしています。
JavaScriptは、ファーストクラスの関数を使用したプロトタイプベースであり、オブジェクト指向、命令型、関数型プログラミングスタイルをサポートしたマルチパラダイム言語です。テキスト、配列、日付、および正規表現を扱うためのAPIを備えていますが、ネットワーキング、ストレージ、グラフィックス機能などのI/Oは含まれておらず、埋め込まれたホスト環境に依存しています。
参照元;英語版Wikipedia
主な要素 | 説明 |
---|---|
高水準 | 人間にとってわかりやすい記述の仕方が出来る言語のこと。 |
動的 | 動的でない言語がコンパイル時に行う事を、実行時に行うこと。 |
動的型付け | 静的型付けに対して、変数などに代入する値の型が実行時に決まる性質のこと。 |
インタプリタ型 | 実行時にコンパイル->実行の流れを一度に行う性質のこと。 |
ECMAScript言語仕様 | JavaScriptの標準仕様。 |
ファーストクラス | 言語における基本的な操作を行える対象。変数へ関数を代入する、無名関数の生成など |
プロトタイプベース | 新しいオブジェクトを生成するときに、既存のオブジェクトを複製する性質のこと。 |
マルチパラダイム言語 | プログラミングパラダイムというプログラムの書き方が、複数種類対応している性質のこと。 |
スタートガイド
JavaScriptの基礎を学ぶ際には以下の項目を学ぶことになります。
DOM(ドキュメントオブジェクトモデル)の操作以外は、他のプログラミング言語を学ぶ際にも通用する考え方になります。
項目 | 概要 |
---|---|
Operator(演算子) | 四則演算を行うための演算子の紹介(+, -, *, /, %)と使い方。また、Math.foor()やMath.random()などのMathオブジェクトの使い方。 |
Variables(変数) | 変数とはなにか、変数の宣言(let)と使い方。 |
Control Flow(制御フロー) | 条件によってプログラムの動きを制御する方法。if文(if, else, else if)や、switch文(switch, case, break)の使い方。 |
Functions(関数) | 関数の作成(function, return)と使い方。 |
Scope(スコープ) | グローバルスコープ、functionalスコープなど、変数の参照範囲。 |
Arrays(配列) | 配列の作成、要素増減(.push, .pop)。 |
Loops(繰り返し) | 同じ処理を複数回行う場合に、同じ命令式を繰り返し書く必要をなくす(for, while)。 |
DOM(ドキュメントオブジェクトモデル操作) | JavaScriptでDOMを操作する。まずはHTMLファイルにJavaScriptファイルを読み込む方法、そしてDOM操作を簡略化できるjQueryの使い方。(this, slideToggle, textなど) |
オブジェクトの生成
JavaScriptにおいては、全てがオブジェクトの様な動きをします。(変数もFunctionもArrayも)つまり、オブジェクトとは何かを知ることはJavaScriptの基本を知る上で重要です。
一番簡単なオブジェクトの生成方法は以下です。
let person = { name: ['Bob', 'Smith'], age: 32, gender: 'male', interests:['music', 'skiing'], bio: function(){ alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.'); }, greeting: function(){ alert('Hi! I\'m ' + this.name[0] + '.'); } };
このpersonオブジェクトの各プロパティを参照してみましょう。
console.log(person.name[0]); //Bob console.log(person.age); //32 console.log(person.interests[1]); //skiing person.bio(); //Bob Smith is 32 years old. He likes music and skiing. person.greeting(); //Hi! I'm Bob.
オブジェクトのプロパティ/メソッドにアクセスする.(ドット)
person.age person.interests[1] person.bio();
.
(ドット)以外に[
と]
(バケット)を使用することもできます。
person['age'] person['interests'][1] person['bio']();
バケットのを使用することはあまり一般的ではありませんが、以下のようにプロパティにアクセスする文字列を作成する際に便利です。
let foobarObject = {foobar: 'Foobar is code for no code'}; let string1 = 'foo'; let string1 = 'bar'; console.log(foobarObject[string1 + string2]);
ネストされたオブジェクト
name: ['Bob','Smith'].
例えば、上記のnameの値を以下の様にすることもできます。
name : { first: 'Bob', last: 'Smith' },
これはサブネームスペースといいます。
アクセスするときはこうなります。
person.name.first person.name.last
また、オブジェクト同様にarray()
やfunction(){}
も入れ子にすることができます。
let myArray = [[[]]]; //array in array in array let myFunction(){ let myFunction(){ let myFunction(){ }; }; };
オブジェクトの更新
person.age = 45; person.name.last = 'Cratchit';
新しいプロパティを追加することもできます。
person.eyes = 'hazel'; person.farewell = function(){ alert("Bye everybody!"); }
プロパティの削除はこのようにします。
delete.person.eyes;
thisの使い方
greeting: function() { alert('Hi! I\'m ' + this.name.first + '.'); }
この箇所でthis
を使いました。これは、現在のオブジェクトを参照する意味で使われています。
つまり
this.name.first
は以下と同義です。
person.name.first
これはオブジェクトのコンテキストが変更になった際にも(person以外のオブジェクト名になるなど)有効な記法です。
スタートガイド
一般的な学習リソース
- Speaking JavaScript [読み物]
(JavaScriptとは) - JavaScript for impatient programmers [読み物]
(せっかちなプログラマーのためのJavaScript) - You Don’t Know JS: Up & Going [読み物]
(あなたはJSを知らない:上を向いていこう) - You Don’t Know JS: Types & Grammar [読み物]
(あなたはJSを知らない:タイプと文法) - You Don’t Know JS: Scope & Closures [読み物]
(あなたはJSを知らない:スコープとクロージャ) - You Don’t Know JS: this & Object Prototypes [読み物]
(あなたはJSを知らない:thisとオブジェクトプロトタイプ) - Modern JavaScript Cheatsheet - Cheatsheet for the JavaScript knowledge you will frequently encounter in modern projects. [読み物]
(モダンJavaScriptチートシート:モダンプロジェクトでよく必要になるJavaScriptの知識) - JavaScript: The Hard Parts [視聴][$]
(JavaScript:ハードパーツ) - Deep Foundations of JavaScript (v3) [視聴][$]
(JavaScriptの深い基礎)
マスタリングJavaScript
- Setting up ES6 [読み物]
(ES6のセットアップ) - Exploring ES6 [読み物]
(ES6の探求) - You Don’t Know JS: ES6 & Beyond [読み物]
(あなたはJSを知らない:ES6とその先) - JavaScript: The Recent Parts [視聴][$]
- Exploring ES2016 and ES2017 [読み物]
(ES2016とES2017を探求する) - Exploring ES2018 and ES2019 [読み物]
(ES2018とES2019を探求する) - JavaScript Regular Expression Enlightenment [読み物]
(JavaScript正規表現の啓発) - You Don’t Know JS: Async & Performance [読み物]
(あなたはJSを知らない:非同期とパフォーマンス) - JS MythBusters [読み物]
(JSの神話) - ES6 FOR EVERYONE! [視聴][$]
(誰でもできるES6!) - ES6: The Right Parts [視聴][$]
(ES6:正しいパーツ) - Using Regular Expressions [視聴][$]
(正規表現を使う) - Robust JavaScript [読み物]
(屈強なJavaScript) - JavaScript Algorithms and Data Structures [読み物]
(JavaScriptのアルゴリズムとデータ構造) - 33 Concepts Every JavaScript Developer Should Know [読み物]
(すべてのJavaScript開発者が知っておくべき33のコンセプト) - doesitmutate.xyz [読み物]
書籍
Understanding ECMAScript 6: The Definitive Guide for JavaScript Developers
(ECMAScript 6を理解する:JavaScriptデベロッパーのための完全ガイド)
JavaScript with Promises
(プロミスとJavaScript)
Test-Driven JavaScript Development
(テスト駆動型JavaScript開発)
関数型JavaScript
funfunfunction: Functional programming in JavaScript
(ファンファンファンクション:JavaScriptでの関数型プログラミング)
- Mostly adequate guide to FP (in javascript) [読み物]
(関数型プログラミングのガイド) - Functional Programming Jargon [読み物]
(関数型プログラミングの専門用語) - Functional-Light-JS [読み物]
(関数型で軽いJS) - JavaScript Allongé [読み物][$]
(JavaScript アロンジェ) - Hardcore Functional Programming in JavaScript [視聴][$]
(ハードコア関数型プログラミング) - Functional-Lite JavaScript [視聴][$]
(関数型で軽いJavaScript) - Professor Frisby Introduces Composable Functional JavaScript [視聴]
(フリスビー教授がコンポーザブルな関数型JavaScriptを紹介)
書籍
Functional Programming in JavaScript: How to improve your JavaScript programs using functional techniques
(JavaScriptでの関数型プログラミング:関数型技術を使ったJavaScriptプログラムの改善方法)
リファレンス/ドキュメント
- MDN JavaScript リファレンス [日本語]
- MSDN JavaScript リファレンス [日本語]
用語集/百科事典/専門用語
- The JavaScript Encyclopedia
(JavaScript百科事典) - JavaScript Glossary
(JavaScript用語集) - Simplified JavaScript Jargon
(シンプルなJavaScript専門用語)
標準仕様
- ECMAScript® 2015 Language Specification
(ECMAScript®2015言語仕様) - ECMAScript® 2016 Language Specification
(ECMAScript®2016言語仕様) - ECMAScript® 2017 Language Specification
(ECMAScript®2017言語仕様) - ECMAScript® 2018 Language Specification
(ECMAScript®2018言語仕様) - ECMAScript® 2019 Language Specification
(ECMAScript®2019言語仕様) - Status, Process, and Documents for ECMA262
(ECMA262のステータス、プロセス、およびドキュメント)
スタイルガイド
- Airbnb JavaScript Style Guide
(Airbnb JavaScript スタイルガイド) - JavaScript Standard Style
(JavaScript標準スタイル) - JavaScript Semi-Standard Style
(JavaScript準標準スタイル)
0 件のコメント:
コメントを投稿