C#er な自分が JavaScript の勉強をした際に、ポイントっぽいと思った事を列挙しました。
不正確な表現などあるかもわかりませんが、自分用の覚え書きということでご容赦ください。
変数のスコープ
-
JavaScript の var宣言変数にはブロックスコープは存在しない!
if (true) { var value = "sample"; } console.log(value); // sample (エラーにはならない)
for (var i = 0; i < 10; i++) { // なんかする } console.log(i); // 10 (エラーにはならない)
-
ブロックスコープの定義方法 (ES6以降)
var
をlet
に変えるだけif (true) { let value = "sample"; } console.log(value); // value is not defined エラー
for (let i = 0; i < 10; i++) { // なんかする } console.log(i); // i is not defined エラー
関数の書き方
-
「関数宣言」による書き方(静的宣言なのでどこに書いてもOK)
function sample() { // なんかする }
-
「関数式」による書き方(実行時評価)
var sample = function() { // なんかする };
オブジェクトと連想配列は同じものである
-
オブジェクトの生成
var 変数名 = new Object();
-
連想配列の生成と初期化
var 変数名 = { キー名 : 値, キー名 : 値, ・・・ };
-
オブジェクト、連想配列の要素にアクセスする方法
-
ブラケット構文によるアクセス
変数名["キー名"]
-
ドット演算子によるアクセス
変数名.キー名
-
高階関数
- 関数を引数や戻り値として受け渡しできる関数
クロージャ
- ローカル変数を参照している関数内関数
クラス・プロトタイプ
-
new 演算子で関数を呼び出すと、コンストラクタとして振る舞う
この場合のthis
は新たに生成されるインスタンスを表す// コンストラクタの定義 var Person = function(name,birth) { this.name = name; this.birth = birth; }; // インスタンス化 var p = new Person('山田太郎','2001/01/01');
JavaScript のすべてのオブジェクトは、内部的にプロトタイプ(prototype)という特別なオブジェクトを持っている
-
メソッドは「プロトタイプ」に宣言、プロパティはコンストラクタで宣言する
// コンストラクタの定義 var Person = function(name,birth) { this.name = name; this.birth = birth; }; // プロトタイプの定義(オブジェクトリテラルを利用した書式) Person.prototype = { showName : function() { return this.name; }, showBirth : function() { return this.birth; } }; // プロトタイプの定義(ドット演算子を利用した書式) Person.prototype.showNameBirth = function() { return this.name + 'さんの誕生日は' + this.birth; } // インスタンス化 var p = new Person('山田太郎','2001/01/01'); console.log(p.showName()); // '山田太郎'が表示される
-
オブジェクトリテラル : 下記の書式の「値」に「関数リテラル(無名関数)」を記述する
{ キー名 : 値 , キー名 : 値 ,・・・}