[TIL] JS: ES6
へんすう
var / let / const
Template Literals
通常の文字列とは異なり、複数行にわたって文字列を記述し、スペース形式で適用できます.
${...}
新しい文字列を挿入するには、演算子を使用しません.内部式は文字列タイプに変換されます.
ex)${1+1}は文字「2」に変換されます.
Arrow Function
1.基本文法
// 매개변수 지정 방법
() => { ... } // 매개변수가 없을 경우
x => { ... } // 매개변수가 한 개인 경우, 소괄호를 생략할 수 있다.
(x, y) => { ... } // 매개변수가 여러 개인 경우, 소괄호를 생략할 수 없다.
// 함수 몸체 지정 방법
x => { return x * x } // single line block
x => x * x // 함수 몸체가 한줄의 구문이라면 중괄호를 생략할 수 있으며 암묵적으로 return된다. 위 표현과 동일하다.
() => { return { a: 1 }; }
() => ({ a: 1 }) // 위 표현과 동일하다. 객체 반환시 소괄호를 사용한다.
() => { // multi line block.
const x = 10;
return x * x;
};
2.コール
const pow = x => x * x;
console.log(pow(10)); // 100
// callback
const arr = [1, 2, 3];
const pow = arr.map(x => x * x);
console.log(pow); // [ 1, 4, 9 ]
パラメータパラメータ
1. Rest parameter
parameterの前の3つの点...(=Spread構文)で定義したパラメータを貼り付けます.
function bar(param1, param2, ...rest) {
console.log(param1); // 1
console.log(param2); // 2
console.log(rest); // [ 3, 4, 5 ]
}
bar(1, 2, 3, 4, 5);
.length()
には影響しません.function foo(...rest) {}
console.log(foo.length); // 0
function bar(x, ...rest) {}
console.log(bar.length); // 1
function baz(x, y, ...rest) {}
console.log(baz.length); // 2
function sum(...args) {
console.log(arguments); // Arguments(5) [1, 2, 3, 4, 5, callee: (...), Symbol(Symbol.iterator): ƒ]
console.log(Array.isArray(args)); // true
return args.reduce((pre, cur) => pre + cur);
}
console.log(sum(1, 2, 3, 4, 5)); // 15
2.Spread構文
オブジェクトを個々の要素に分離する構文.
console.log(...[1, 2, 3]) // 1, 2, 3
function foo(v, w, x, y, z) {
console.log(v); // 1
console.log(w); // 2
console.log(x); // 3
console.log(y); // 4
console.log(z); // 5
}
// ...[2, 3]는 [2, 3]을 개별 요소로 분리한다(→ 2, 3)
// spread 문법에 의해 분리된 배열의 요소는 개별적인 인자로서 각각의 매개변수에 전달된다.
foo(1, ...[2, 3], 4, ...[5]);
Contactは省略できます!
const arr = [1, 2, 3];
console.log([...arr, 4, 5, 6]); // [ 1, 2, 3, 4, 5, 6 ]
// 기존 배열에 다른 배열의 개별 요소를 각각 push 하는 방법
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
arr1.push(...arr2); // == arr1.push(4, 5, 6);
console.log(arr1); // [ 1, 2, 3, 4, 5, 6 ]
// splice (삽입)
const arr1 = [1, 2, 3, 6];
const arr2 = [4, 5];
arr1.splice(3, 0, ...arr2); // == arr1.splice(3, 0, 4, 5);
console.log(arr1); // [ 1, 2, 3, 4, 5, 6 ]
// copy
const arr = [1, 2, 3];
const copy = [...arr];
console.log(copy); // [ 1, 2, 3 ]
copy.push(4); // copy를 변경한다.
console.log(copy); // [ 1, 2, 3, 4 ]
// arr은 변경되지 않는다.
console.log(arr); // [ 1, 2, 3 ]
3. Rest/Spread Property
Object.assign
を置き換えてオブジェクトをマージ/変更できます.// 객체의 병합
const merged = { ...{ x: 1, y: 2 }, ...{ y: 10, z: 3 } };
console.log(merged); // { x: 1, y: 10, z: 3 }
// 특정 프로퍼티 변경
const changed = { ...{ x: 1, y: 2 }, y: 100 };
// changed = { ...{ x: 1, y: 2 }, ...{ y: 100 } }
console.log(changed); // { x: 1, y: 100 }
// 프로퍼티 추가
const added = { ...{ x: 1, y: 2 }, z: 0 };
// added = { ...{ x: 1, y: 2 }, ...{ z: 0 } }
console.log(added); // { x: 1, y: 2, z: 0 }
Object property
1.サムネイル
property値を変数として使用する場合は、名前を省略できます.
let x = 1, y = 2;
const obj = { x, y };
console.log(obj); // { x: 1, y: 2 }
メソッド宣言時にfunctionキーワードを省略できます.const obj = {
name: 'Song',
// 메소드 축약 표현
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Song
Object.create()
関数ではなく、オブジェクトの内部に設定できます.const parent = {
name: 'parent',
sayHi() {
console.log('Hi! ' + this.name);
}
};
const child = {
// child 객체의 프로토타입 객체에 parent 객체를 바인딩하여 상속을 구현한다.
__proto__: parent,
name: 'child'
};
parent.sayHi(); // Hi! parent
child.sayHi(); // Hi! child
2. Destructuring
オブジェクトからオブジェクトの各プロパティを抽出し、変数リストに割り当てます.このとき、割り当て基準はproperty keyです.
const obj = { firstName: 'Ungmo', lastName: 'Lee' };
// property key를 기준으로 destructuring할당이 이루어진다. 순서는 의미가 없다.
// 변수 lastName, firstName가 선언되고 obj가 Destructuring되어 할당된다.
const { lastName, firstName } = obj;
console.log(firstName, lastName); // Ungmo Lee
Class
1.定義
クラスに複数のConstructorが存在する場合、構文エラーが発生します.
// 클래스 선언문
class Person {
// constructor(생성자)
constructor(name) {
// this 클래스가 생성할 인스턴스
this._name = name; // _name 클래스 필드의 선언과 초기화
}
sayHi() {
console.log(`Hi! ${this._name}`);
}
}
// 인스턴스 생성
const me = new Person('Lee');
me.sayHi(); // Hi! Lee
console.log(me) // Person {_name: "Lee"}
2.クラスフィールド
クラスフィールドの宣言と初期化は、コンストラクション関数の内部で行う必要があります.
3. Getter, Setter
クラスフィールドに値を割り当てるたびに、クラスフィールドの値を操作するために使用されます.訪問者の割合.
何かを得るときに使うには、何かを返さなければなりません.
class Foo {
constructor(arr = []) {
this._arr = arr;
}
// getter: get 키워드 뒤에 오는 메소드 이름 firstElem은 클래스 필드 이름처럼 사용된다.
get firstElem() {
// getter는 반드시 무언가를 반환해야 한다.
return this._arr.length ? this._arr[0] : null;
}
}
const foo = new Foo([1, 2]);
// 필드 firstElem에 접근하면 getter가 호출된다.
console.log(foo.firstElem); // 1
割り当てられた形式で使用されます.
class Foo {
constructor(arr = []) {
this._arr = arr;
}
// setter: set 키워드 뒤에 오는 메소드 이름 firstElem은 클래스 필드 이름처럼 사용된다.
set firstElem(elem) {
// ...this._arr은 this._arr를 개별 요소로 분리한다
this._arr = [elem, ...this._arr];
}
}
// 클래스 필드 firstElem에 값을 할당하면 setter가 호출된다.
foo.firstElem = 100;
console.log(foo.firstElem); // 100
4. Static method
主にアプリケーションのグローバル作成に使用されるユーティリティ関数です.
5.クラス継承
これは、子クラスによって再定義され、親クラスが持つメソッドを使用する方法です.(= overriding)
親Circleを継承する子Cylinderを定義します.
親を参照するか、親を呼び出すコンストラクション関数.
lass Parent {}
class Child extends Parent {
// ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
constructor() {}
}
const child = new Child();
Reference
この問題について([TIL] JS: ES6), 我々は、より多くの情報をここで見つけました https://velog.io/@songbetter/TIL-ES6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol