LoginSignup
2
1

More than 5 years have passed since last update.

JavaScript 初学者の覚え書き

Last updated at Posted at 2018-08-07

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以降)
    varlet に変えるだけ

    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());  // '山田太郎'が表示される
    
  • オブジェクトリテラル : 下記の書式の「値」に「関数リテラル(無名関数)」を記述する

    { キー名 :  , キー名 :  ,・・・}
    
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1