2022.6.5
JavaScriptについて学んだことを書き留めておく自分用のメモです。Twitterに投稿した内容に追記を加えてまとめています。できるだけ継続して追記していきたいと思います。
const promise = doSomething();
const promise2 = promise.then(successCallback, failureCallback);
// or
const promise2 = doSomething().then(successCallback, failureCallback);
// DOM
const button = document.getElementById('addButton');
const lists = document.getElementById('lists');
// 関数
async function getPosts() {
// データのやりとり
const res = await fetch('https://jsonplaceholder.typicode.com/posts');
const posts = await res.json();
return posts;
}
async function listPosts() {
const posts = await getPosts();
posts.forEach(addList);
}
// イベント
function addList(post) {
const list = document.createElement('li');
list.innerText = post.title;
lists.appendChild(list);
}
window.addEventListener('load', listPosts);
button.addEventListener('click', listPosts);
function 高階関数(コールバック関数) {
コールバック関数();
};
// コード例。
function writeDiary() {
console.log('日記を書く');
};
function drinkWater() {
console.log('水を飲む');
};
function washFace() {
console.log('顔を洗う');
};
function wakeUp(fn) {
if( window.confirm('起きましたか?') ) {
fn(); // コールバック関数の処理
} else {
console.log('まだ寝ています');
}
};
wakeUp(drinkWater);
// 「起きましたか?」にOKを押すと、「水を飲む」が出力。
// wakeUp()関数内の引数を変えると、それぞれの処理結果が出力される。writeDiaryなら「日記を書く」、washFace()なら「顔を洗う」が出力。
const sum = array.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
});
const array = [1, 2, 4, -3];
const sum = array.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
});
console.log(sum);
// 4と出力される。
// 1 + 2 + 4 + (-3) = 4という計算結果。以下何が起こっているかの詳細。
// 1回目の計算:accumulator = 1、currentValue = 2として値が入る。return 1 + 2となり、accumulator = 3となる。
// 2回目の計算:accumulator = 3、currentValue = 4として値が入る。return 3 + 4となり、accumulator = 7となる。
// 3回目の計算:accumulator = 7、currentValue = -3として値が入る。return 7 + (-3)となり、accumulator = 4となる。
// 結果、4が出力される。
let new_array = array.map(function callback( currentValue[, index[, array]]) {
// 新しい配列の要素を返す
}[, thisArg])
const numberArray = [1, 4, 9, 16];
const map10x = numberArray.map(param => param * 10);
console.log(map10x);
// [10, 40, 90, 160]と出力される。
// 引数(この場合はparam)は別の単語でも良い。
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ', 'グレープフルーツ', 'アボカド'];
console.log(fruitsArray.map(fruits => fruits.length));
// [3, 3, 3, 8, 4]と出力される。
// 文字列の配列を元にして、文字数を表示する配列を生成。
param => expression
(param1, paramN) => expression
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ', 'グレープフルーツ', 'アボカド'];
console.log(fruitsArray.map(fruits => fruits.length));
// [3, 3, 3, 8, 4]と出力される。
const button = document.querySelector('.button');
button.addEventListener('click', (event) => {
console.log(fruitsArray);
});
// buttonというclassの付いた要素をクリックしたときに、['リンゴ', 'ミカン', 'ブドウ', 'グレープフルーツ', 'アボカド']と出力される。
array.join([separator])
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
console.log(fruitsArray.join());
// リンゴ,ミカン,ブドウと出力される。
console.log(fruitsArray.join(''));
// リンゴミカンブドウと出力される。
console.log(fruitsArray.join('-'));
// リンゴ-ミカン-ブドウと出力される。
console.log(fruitsArray.join(' '));
// リンゴ ミカン ブドウと出力される。
splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2, itemN)
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
fruitsArray.splice(1, 0, 'グレープフルーツ');
console.log(fruitsArray);
// ['リンゴ', 'グレープフルーツ', 'ミカン', 'ブドウ']と出力される。
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
fruitsArray.splice(2, 0, 'グレープフルーツ');
console.log(fruitsArray);
// ['リンゴ', 'ミカン', 'グレープフルーツ', 'ブドウ']と出力される。
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
fruitsArray.splice(0, 1, 'グレープフルーツ');
console.log(fruitsArray);
// ['グレープフルーツ', 'ミカン', 'ブドウ']と出力される。
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
fruitsArray.splice(0, 2, 'グレープフルーツ');
console.log(fruitsArray);
// ['グレープフルーツ', 'ブドウ']と出力される。
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
fruitsArray.splice(0, 1);
console.log(fruitsArray);
// ['ミカン', 'ブドウ']と出力される。
// 追加するitemを指定していないので、単に指定要素が取り除かれる。
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
fruitsArray.splice(1, 1, 'グレープフルーツ', 'アボカド' );
console.log(fruitsArray);
// ['リンゴ', 'グレープフルーツ', 'アボカド', 'ブドウ']と出力される。
for (const variable of iterable) {
statement
}
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
for (const fruit of fruitsArray) {
console.log(fruit);
}
// 'リンゴ', 'ミカン', 'ブドウ'が順に出力される。
// fruitは要素、fruitsArrayは配列。
addEventListener(type, listener);
addEventListener(type, listener, options);
addEventListener(type, listener, useCapture);
button.addEventListener('click', () => {
if (button.textContent === 'ON') {
button.textContent = 'OFF';
}
else {
button.textContent = 'ON';
}
});
// 初期状態のテキストON。クリックするたびにONとOFFが切り替わる。
// buttonはあらかじめ定義した変数。
appendChild(aChild);
let text1 = document.createElement('p');
text1.textContent = 'Grapes are fruit.';
document.body.appendChild(text1);
// Grapes are fruit.と出力される。
a.reverse()
const fruitsArray = ['リンゴ', 'ミカン', 'ブドウ'];
fruitsArray.reverse();
console.log(fruitsArray);
// ['ブドウ', 'ミカン', 'リンゴ']と出力される。
try {
try_statements
}
catch (exception_var) {
catch_statements
}
finally {
finally_statements
}
const grape = 'ブドウ';
try{
grape = 'ミカン';
} catch(e){
console.log('エラーが発生。');
}
console.log(grape);
// tryブロックの中で定数grapeを'ミカン'に書き換えようとするがエラーのため実行されず、catchブロックの「エラーが発生。」が出力。
// 最終行はブドウが出力。
// try...catchを使わなかった場合の例。
const grape = 'ブドウ';
grape = 'ミカン'; // 定義済みの定数を書き換えようとしてエラーになる。
console.log(grape);
// Uncaught TypeError: Assignment to constant variable.というエラーメッセージが出力。
// エラーのため最終行は出力されない。