[Udemy] JavaScriptエンジニアのためのES6完全ガイド 勉強メモ その2
[Udemy] JavaScriptエンジニアのためのES6完全ガイド 勉強メモ その2:
【世界で2万人が受講】JavaScriptエンジニアのためのES6完全ガイド | Udemy を学習したのでメモしておきます。
その1の続きです。
const - JavaScript | MDN
let - JavaScript | MDN
変更される可能性がない場合(定数)は
テンプレート文字列 - JavaScript | MDN
テンプレート文字列、テンプレートストリング ともいう。
ES5
テンプレートリテラルを使った場合
アロー関数 - JavaScript | MDN
ES5
アロー関数を使った場合
関数内に1個しか評価項目がない場合、中括弧、returnを削除、1行に省略することもできる
ES5
アロー関数を使った場合
Lexical 'this'(レキシカル ディス)
記述する場所によって
※lexical = 語彙の、構文的な
ES6オブジェクトリテラルの拡張 - Qiita
ES5
ES6
デフォルト引数 - JavaScript | MDN
ES5
ES6
スプレッド構文 - JavaScript | MDN
引数の部分にRest演算子を用いると可変長でまとめて配列に処理する
渡す引数
Spread演算子 = 展開する、広げる、フラットする = まとまっているものを分解する演算子(Restとは逆)
概要
【世界で2万人が受講】JavaScriptエンジニアのためのES6完全ガイド | Udemy を学習したのでメモしておきます。その1の続きです。
構文編
constとlet
const - JavaScript | MDNlet - JavaScript | MDN
変更される可能性がない場合(定数)は
const、変わる可能性がある場合はletを使う。// var name = 'Taro'; // var job = 'Frontend Engineer'; // var hourlySalary = 4000; // ES6 const name = 'Taro'; let job = 'Frontend Engineer'; let hourlySalary = 4000; // 時間が経過したとして... job = 'Technical Director'; hourlySalary = 6000;
テンプレートリテラル
テンプレート文字列 - JavaScript | MDNテンプレート文字列、テンプレートストリング ともいう。
ES5
function getMessage() {
const year = new Date().getFullYear();
return "今年は"+year+"年です。";
}
getMessage();
function getMessage() {
const year = new Date().getFullYear();
return `今年は${year}年です。`; // ひとつのまとまりとしてわかりやすく文字列を表現
// return `今年は${year+10}年です。`; // こういうこともできる
}
getMessage();
アロー関数
アロー関数 - JavaScript | MDNES5
const add = function(a,b) {
return a + b;
}
add(1,2);
const add = (a, b) => {
return a + b;
}
add(1,2);
const add = (a, b) => a + b; add(1,2);
mapを使う場合の例ES5
const numbers = [1,2,3];
numbers.map(function (number) {
return 2 * number;
});
const numbers = [1, 2, 3];
numbers.map((number) => {
return 2 * number;
});
// もしくは
numbers.map(number => 2 * number);
記述する場所によって
thisが決まる。.bindやselfを使う必要がない。※lexical = 語彙の、構文的な
const team = {
members: ['Taro', 'Hanako'],
teamName: 'ONE PROJECT TEAM',
teamSummary: function() {
// アロー関数を書く場所で囲っているthisがアロー関数内のthisになる。
// この場合、this === team
return this.members.map( (member) => {
return `${member}は${this.teamName}の所属です。`; // このコールバックは別世界で実行されている
});
}
};
team.teamSummary();
オブジェクトリテラル
ES6オブジェクトリテラルの拡張 - QiitaES5
function createMusicShop(inventory) {
return {
inventory: inventory,
inventoryValue: function () {
// 配列のpriceを足して合計を求める
return this.inventory.reduce((total, music) => total + music.price , 0);
},
priceForTitle: function (title) {
// タイトルに対応した価格を返す
return this.inventory.find(music => music.title === title).price;
}
};
}
const inventory = [
{ title: 'KESHIKI', price: 2500 },
{ title: 'aiqing', price: 3000 },
]
const musicShop = createMusicShop(inventory);
musicShop.inventoryValue(); // 5500
'---'
musicShop.priceForTitle('KESHIKI'); // 2500
function createMusicShop(inventory) {
return {
inventory, // オブジェクトのkeyとvalueが同じ場合は省略できる
inventoryValue() { // ': function' を省略できる
return this.inventory.reduce((total, music) => total + music.price, 0);
},
priceForTitle(title) { // ': function' を省略できる
return this.inventory.find(music => music.title === title).price;
}
};
}
関数のデフォルト引数
デフォルト引数 - JavaScript | MDNES5
// デフォルトの引数をif文で記述する必要がある
function makeAjaxRequest(url, method) {
if (!method) {
method = 'GET';
}
// ajaxリクエストをするロジックがここにあると想定
// ...
return method;
}
makeAjaxRequest('google.com'); // methodがGETになる
makeAjaxRequest('google.com', 'POST'); // methodがPOSTになる
// makeAjaxRequest の第2引数で指定するとif文が不要になる
function makeAjaxRequest(url, method = 'GET') {
// ajaxリクエストをするロジックがここにあると想定
// ...
return method;
}
makeAjaxRequest('google.com'); // methodがGETになる
makeAjaxRequest('google.com', 'POST'); // methodがPOSTになる
RestとSpread演算子
スプレッド構文 - JavaScript | MDN引数の部分にRest演算子を用いると可変長でまとめて配列に処理する
function addNumbers(a,b,c,d,e) {
const numbers = [a, b, c, d, e];
return numbers.reduce((sum, number) => {
return sum + number;
}, 0);
}
addNumbers(1, 2, 3, 4, 5);
(a,b,c,d,e)を可変長にしたい場合 Rest演算子を使うfunction addNumbers(...numbers) {
return numbers.reduce((sum, number) => {
return sum + number;
}, 0);
}
addNumbers(1, 2, 3, 4, 5, 6, 7);
const defaultMembers = ['Taro', 'Hanako']; const addedMembers = ['Ichiro', 'Tomoko']; const favoriteMembers = ['Jiro', 'Sachiko'];
// これらをひとまとまりにしたい // ES5 defaultMembers.concat(addedMembers); // ["Taro","Hanako","Ichiro","Tomoko"] // Spread演算子を使う(配列の中身を展開してくれる)concatと同じ結果に [...defaultMembers, ...addedMembers]; // ["Taro","Hanako","Ichiro","Tomoko"] // favoriteMembers を先頭に持ってきたい [...favoriteMembers, ...defaultMembers, ...addedMembers]; // ["Jiro","Sachiko","Taro","Hanako","Ichiro","Tomoko"] // favoriteMembers の前に1つだけ'Saburo'を持ってきたい // 間に'Kanako'を持ってきたい ['Saburo', ...favoriteMembers, 'Kanako', ...defaultMembers, ...addedMembers]; // ["Saburo","Jiro","Sachiko","Kanako","Taro","Hanako","Ichiro","Tomoko"]
function validateNameList(...names) { // Rest演算子
if (names.indexOf('Taro') < 0) {
// もし'Taro'がなかったら、'Taro'を入れる
return ['Taro', ...names]; // Spread演算子 ["Taro", "Hanako", "Ichiro"]
}
return names;
}
validateNameList('Hanako','Ichiro');
コメント
コメントを投稿