ES 6構文の概要
46620 ワード
序文
JavaScriptとES 6を学習して得たES 6文法を簡単にまとめます.
Hoistingとvar
シースとは、varとして宣言された変数を集合させ、まず最上位に宣言することです.
console.log(name);
var name = "hello";
는 실제로
var name;
console.log(name);
var name = "hello";
로 동작한다.
cont内部の変更
constで指定したオブジェクトは変更できませんが、内部プロパティは変更できます.
const tom = { lang: "Python" };
tom.lang = "JavaScript";
console.log(tom);
JavaScript dict内部string
pythonとは異なり、キー値は内部に「」を付ける必要がなく文字列で処理できます.
const tom = {
lang = "JavaScript";
}
const tom = {
"lang" = "Javascript";
}
key値を計算したい場合は[]で囲みます.const tom = {
["score" + "1"]: 10
};
ショートカット属性名
属性のキーが変数名と一致する場合は、ボタンをガチャガチャと書き込むしかありません.
let name = "Tom";
let age = 10;
let tom = {
name: name,
age: age,
print: function() {
console.log(`name: ${this.name}, age: age${this.age}`);
}
}
let tom = {
name,
age,
print() {
console.log(`name: ${this.name}, age: age${this.age}`);
}
}
オブジェクトのコピー時に浅いコピーを適用
object,array対入コピー時は浅いコピーです.
1つの破壊法はシリアル化−非シリアル化法である.
const obj1 = { value: 10 };
const obj2 = obj1;
obj1.value += 1;
console.log(`obj1:`, obj1);
console.log(`obj2:`, obj2);
const obj3 = JSON.parse(JSON.stringify(obj1));
Template Literals
バンド
`string text ${expression} string text`
Python、Pythonとは異なり、以下の式ではfなどの追加の記号は必要ありません.f"""string text {expression} string text"""
配列非構造化(array destructuring)
左右の変数の数が異なる場合でも、構文が実行されます.
必要な変数のみをインポートしたり、変数を定義しなかったり、default valueを設定したりできます.
let [name] = ["Tom", 10, "Seoul"];
let [,age,] = ["Tom", 10, "Seoul"];
let [name, age, region, height] = ["Tom", 10, "Seoul"]
let [name, age, region, height=150] = ["Tom", 10, "Seoul"]
function get_default_height() {
return 150;
}
let [name, age, region, height=get_default_height()] = ["Tom", 10, "Seoul"]
dictの場合const tom = {
name: "Tom",
age: 10,
region: "Seoul"
};
const {age, name, height} = tom;
dictと関数を組み合わせて使用する場合const f = (person) => {
console.log(person.name);
}
const f = ({name}) => {
console.log(name);
}
活動場所を表すfor (const person of people) {
console.log(person.name, person.age);
}
for (const {name, age} of people) {
console.log(name, age);
}
nest文の場合次の領域は変数として指定されていません
const person = {
name: "Tom",
age: 10,
region: {
contry: "서울",
postcode: "06222",
}
};
const { name, region: { postcode }} = person;
console.log(name, postcode);
展開演算子
JAvascriptは展開演算子で、
...
を使用します.let [name, ...rest] = ["Tom", 10, "Seoul"];
let names = ["Steve", "John"];
let students = ["Tome", ...names, ...names];
関数としてのパラメータlet f = (...args) => {
console.log(args);
}
新しいオブジェクトを作成するときlet tom = {
name: "Tom",
age: 10,
region: "Seoul"
};
let steve = {
...tom,
name: "Steve"
};
複雑な場合はimmerライブラリの使用を検討できます.次は一般的なnodejs関数を用いた哲学です
const numbers = [1, 3, 7, 8];
Math.max(numbers) # Nan
Math.max(...numbers)
関数のDefault Parametersですべてのタイプの変数を有効にする
pythonは可変値のみ使用できます
したがって、関数を実行することで関数を定義できます.
JAvascriptは、関数を呼び出すときに1回呼び出されます.
function f(name="Tom", age=10) {
}
const get_default_age = () => 10
function h(name="Tom", age=get_default_age()) {
}
関数のNameパラメータ
サポート場所と名前とは異なり、pythonはjavascriptが{}形式のオブジェクトを作成しない限りpositionalパラメータのみをサポートします.
# python
def f(name, age, region):
pass
f(name="Tom", age=10, region="Seoul")
// javascript
function f(name, age, region) {
}
f({name: "Tom", age: 10, region: "Seoul"})
Arrow Function
function fn1(){
return
};
const fn2 = function() {
return
};
const fn3 = () => {
};
arrow関数ではreturnがなくても式のみが使用され、その意味はreturnと同じです.const fn4 = (x, y) => (x + y);
const fn5 = x => x + 10;
arrow関数でこのメソッドを使用するarrow関数の場合、これは変わらず、直接使用できます.
var tom = {
name: "Tom",
print1: function() {
console.log(`[print1-1] name : ${this.name}`);
(function() {
console.log(`[print1-2] name : ${this.name}`);
})();
},
print2: function() {
console.log(`[print2-1] name: ${this.name}`);
var me = this;
(function() {
console.log(`[print3-1] name : ${me.name}`);
})();
},
print3: function() {
console.log(`[print[3-1] name : ${this.name}`);
(() => {
console.log(`[print3-2] name: ${this.name}`);
})();
}
}
関数の使い方をまとめるconst f = (x, y) => x + y;
const f = (x, y) => {x, y};
const f = (x, y) => ({x: x, y: y}); // 소괄호 꼭 필요
const f = (x, y) => {
return {x: x, y: y};
}
const f = function(x, y) {
return {x: x, y: y};
}
function f(x, y) {
return {x: x, y: y};
}
ダイヤルバック(地獄)->Promise->async/await(ES 8,ECAM 2017)awaitを内部に書き込むには、関数をasyncと宣言する必要があります.
ES 6からクラスキーコンストラクタキー,class,constructor,super,extendsを導入
モジュラシステム
scriptラベルのみでロードします.
CommonJSモジュール、ES 6モジュールなどに置き換える
//commonjs, a.js
const name = "tom";
const age = 10;
module.exports = {
name,
age,
region: "Seoul"
};
//b.js
const my_module = require("./a");
const { name } = require("./a");
// es6, c.js
const name = "tom";
const age = 10;
export default {
name,
age,
region: "Seoul"
};
export {
name,
};
// d.js
import my_module from "./c";
import { name } from "./c";
カッコがない場合はdefault全体をロードします.Nodeの後にes 6 moduleが現れ、nodeはes 6構文の一部をサポートしていません.moduleが典型的な例です
高次関数
Pythonのdecoratorに似ています
function base_10(fn) {
function wrap(x, y) {
return fn(x, y) + 10;
}
return wrap;
}
function mysum(x, y) {
return x + y;
}
mysum = base_10(mysum);
console.log(mysum(1, 2)); // 13
矢印関数を使用して展開const base_10 = (fn) => (x, y) => fn(x, y) + 10;
const mysum = (a, b) => a + b;
const return_fn = base_10(mysum);
console.log(return_fn(1, 2)); // 13
es6 (ECMAScript2015)babelijs.io/docs/en/learn
Reference
この問題について(ES 6構文の概要), 我々は、より多くの情報をここで見つけました https://velog.io/@noname2048/ES6-문법-개괄テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol