[TIL] Modern JavaScript


矢印関数

  • 一般関数式
  • const add = function (x, y) {
      return x + y;
    }
  • 矢印関数式
  • const add = (x, y) => x + y;
    矢印関数の場合は、関数を省略できます.関数の内容がreturn 1行の場合は、カッコを省略することもできます.
    const getStudentAvg = arr => {
      return arr
        .filter(person => person.job === 'student')
        .reduce((sum, person) => (sum + person.grade), 0);
    }
    関数の内容がreturnを含む複数行の場合は、カッコを省略することもできます.

    Spread/Rest構文

    let arrayToSpread = [1, 2];
    add(...arrayToSpread); // 3
    
    let arrayFromSpread = ...arrayToSpread;
    console.log(arrayFromSpread); // [1, 2]
  • spread syntax: array to individual elements
  • rest parameter: individual elements to array
  • 構造分解の割り当て


    配列またはオブジェクトのプロパティを分解することで、その値を各変数に含める式.
  • オブジェクト略記
  • var o = {p: 42, q: true};
    var {p, q} = o;
    
    console.log(p); // 42
    console.log(q); // true
  • パラメータで渡されたオブジェクト上でフィールド
  • を分解する.
    function whois({displayName: displayName, fullName: {firstName: name}}){
      console.log(displayName + " is " + name);
    }
    
    let user = {
      id: 42,
      displayName: "jdoe",
      fullName: {
          firstName: "John",
          lastName: "Doe"
      }
    };
    
    whois(user); // "jdoe is John"
    userという名前のobject属性を分解し、displayName、nameなどの変数に入れてアクセスします.

    node.js

  • 要求構文
  • // script1.js
    const module2 = require('./script2.js');
    // script2.js
    console.log('this is module 2');
    モジュールまたはスクリプトはrequire文でロードできます.
  • module.exports & exports
  • // script1.js
    const module2 = require('./script2.js')
    console.log(modules2) // 'this is module 2'
    // script2.js
    module.exports = 'this is module 2'
    module.exportsを使用して、作成したモジュールを他のスクリプトからロードできます.ドアに戻るのと同じです.
    module.exports.hello = true; // Exported from require of module
    exports = { hello: false };  // Not exported, only available in the module
    エクスポートはモジュールです.exportsを参照するショートカットとして、他のオブジェクトを直接exportsに再割り当てすると、モジュールではありません.exportsは参照されていないため、他のスクリプトでは使用できません.

    classes & instances

    class Student {
      constructor(commitment, course, wave, name) {
        this.commitment = commitment;
        this.course = course;
        this.wave = wave;
        this.name = name;
      }
      
      getDisplayName () {
      	return `${this.commitment} ${this.course} ${this.wave} ${this.name}`;
      }
      
      printDisplayName () {
        console.log(this.getDisplayName());
      }
    }
    
    let me = new Student('Full', 'IM', '28', '도하영');
    me.printDisplayName() // 'Full IM 28 도하영'
  • class:特定の属性とメソッドを持つオブジェクト青写真(Studio)
  • 例:classという青写真を使用して作成された独立したオブジェクト(me)
  • prototype:classを作成するためのプロトタイプオブジェクト
  • コンストラクタ:新規インスタンスの作成時に実行されるコンストラクタ
  • thi:関数を実行するときに一意の実行コンテキスト
  • function methods


  • call vs apply
    この値を明示的に指定するときに使用する呼び出し方法.最初のパラメータは常にこの値を入力します.操作は同じですが、call()はパラメータリストを受け入れ、apply()はパラメータ配列を受け入れます.

  • bind
    呼び出しメソッドは、.callと同様に、すぐに実行される関数ではなく、バインドされた関数を返します.
  • Sources
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment