JSで学んだことをメモる
12/2 Array操作関係の高階関数 vs for-of の考察
- 配列に対して何かしらの操作をするのであれば、for-ofよりfilterやmapを使った方がいい(for-ofの場合は可読性の観点や取り回しのめんどくささから使わない方がベター)
- 条件に合致したらループを抜けたいのであればfor-of(逆にforEachなどはbreakできないので使わない方がよい)
- 配列のすべての要素にアクセスするかつ途中で抜けないのであれば、可読性の観点からforEachを利用してもいい。ただし、計算速度はfor-of > forEachなので自分はfor-ofを推奨する。
- 関数としてループを反復利用したい場合はfor-ofよりforEachがよい
12/3 JSON.parseを利用したJSONかどうかの判定
JSON.parse
はJSON→文字列に変換する関数。
JSON.parse
に有効ではない文字列を投入すると、SyntaxError
が返ってくる。
これを利用することで、文字列がJSONかどうかを判定することができる。
function isJSON(str){
try {
JSON.parse(str);
} catch(e) {
return false
}
return true;
}
12/4 分割代入構文
解説ページ:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
- 簡単な例
const testData = {
"header": ["header"],
"data": {
data1: 1,
data2: 2
}
}
const {header, data} = testData
const {data: outputData} = testData
const {data:{data2}} = testData
console.log(header) // "header"
console.log(data) // {data1: 1, data2: 2}
console.log(outputData) // {data1: 1, data2: 2}
console.log(data2) // 2
- 所感
REST API叩いたときに出力される要素数が多かったり、取り回しが面倒そうなデータ構造だった時なんかに使うととても便利。あとの使い方はまだ勉強中なので、もっといい感じに使いたい。
12/7 Dateで曜日を取得する
.getDay()
を使うと曜日に対応した数字(日曜始まりの0~6)が返ってくる。
- example (今日が月曜日の場合)
const date = new Date () ;
console.log(date.getDay) // 1
これを利用すると数日後は何曜日か?や、今週の〇曜日は何日か?などの取り回しが出来る。便利。
12/8 sort関数メモ
Array.sort()
を使うことで配列をソートすることができる。
- example1
const stringArray = [ "computer", "mendako", "debug","build", "apple", ]
stringArray .sort()
console.log(stringArray ) // ["apple", "build", "computer", "debug", "mendako"]
const numArray = [3, 1, 5, 10, 4]
numArray.sort()
console.log(numArray) // [1, 10, 3, 4, 5]
example1のように Array.map()
はデフォルトでは文字列として比較・ソートされるため、数字の大小でソートする場合は次のように書く。
- example2
const numArray = [3, 1, 5, 10, 4]
const ascArray = numArray.sort((a, b) => a - b);
console.log(ascArray ) // [1, 3, 4, 5, 10]
const descArray = numArray.sort((a, b) => b - a);
console.log(descArray) // [10, 5, 4, 3, 1]
12/9 カラーコードのランダム生成
JavaScriptでカラーコードをランダム生成したくなったことがあったのでその時のメモ。
// rgb()形式
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
const color = `rgb(${r},${g},${b})`;
// 16進数形式
const r = ('0' + Math.floor(Math.random() * 256).toString(16)).slice(-2);
const g = ('0' + Math.floor(Math.random() * 256).toString(16)).slice(-2);
const b = ('0' + Math.floor(Math.random() * 256).toString(16)).slice(-2);
const color = '#' + r + g + b;
12/10 サクッとYYYY-MM-DDでdate取得する
ISO8601に準拠した形式は、以下のように取得可能である。
const event = new Date('10 December 2020 14:00 UTC');
console.log(event.toISOString()); // "2020-12-10T14:00:00.000Z"
これをsplitを利用して分割するとYYYY-MM-DDが簡単に取得できる。
const event = new Date('10 December 2020 14:00 UTC');
const output = event.toISOString().split('T')[0] // "2020-12-10"
参考サイト:
12/11 非同期処理メモ1
.thenを使うとシーケンシャルにできる。
// 非同期処理: 3倍にする
const treble = function(number) {
return new Promise(function(resolve) {
resolve(number * 3);
});
};
// 同期処理: ログに表示する
const dump = function(number) {
console.log(number);
return number;
};
treble(10) // 10 * 3 -> 30
.then(treble) // 30 * 3 -> 90
.then(dump)
.then(treble) // 90 * 3 -> 270
.then(dump);
参考&引用元:https://qiita.com/kiyodori/items/da434d169755cbb20447
12/14 アロー関数メモ1
function()の代替として、ES2015から利用できるようになった。
const bookList = [
{title: 'JavaScriptふりがなプログラミング', price: '1643円'},
{title: '初めてのJavaScript', price: '3520円'},
{title: 'JavaScript本格入門', price: '3278円'}
]
const bookTitleList = bookList.map(function(book){ return book.title })
console.log(bookTitle) // ["JavaScriptふりがなプログラミング", "初めてのJavaScript", "JavaScript本格入門"]
const bookTitleList = bookList.map(book => book.title)
console.log(bookTitle) // ["JavaScriptふりがなプログラミング", "初めてのJavaScript", "JavaScript本格入門"]
アロー関数を使うことでコードが短くシンプルに書けるようになった。
ただし、thisやargumentsなどの振る舞いが変わってくるので注意が必要。
参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions
12/15 例外処理とその考え方メモ
-
例外処理のさせ方
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Control_flow_and_error_handling -
考え方、ベストプラクティスなど
https://language-and-engineering.hatenablog.jp/entry/20101029/p1
https://www.it-swarm-ja.tech/ja/javascript/javascriptエラー処理のベストプラクティスは何ですか?/972643004/ -
非同期処理とエラーハンドリング
https://jsprimer.net/basic/async/
(多分そのうち気づいたら増える)
12/16 try-catchの書き方メモ
聞かれて一応勉強しなおしたのでメモする。
- 基本的な書き方
try{
// 実行したいコードを書く
} catch(error) {
// tryで例外が発生したらその情報がerrorに格納される
// errorはcatchブロックにて利用可能
console.log(error)
}
また以下のように例外毎に条件付けを行うこともできる。
try {
myroutine(); // 3 つの例外を投げる可能性があります
} catch (e) {
if (e instanceof TypeError) {
// TypeError 例外を処理するための文
} else if (e instanceof RangeError) {
// RangeError 例外を処理するための文
} else if (e instanceof EvalError) {
// EvalError 例外を処理するための文
} else {
// 任意の指定されていない例外を操作するための文
logMyErrors(e); // エラーハンドラーに例外オブジェクトを渡す
}
}
- finallyブロック
finallyブロックはcatchの有無にかかわらず実行可能です。
openMyFile();
try {
// リソースを結び付けます
writeMyFile(theData);
} catch(error){
// 例外処理
console.log(error)
} finally {
closeMyFile(); // リソースを常に閉じます
}
参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/try...catch
12/18 ECMAScriptとBabel
ECMAScriptとは
ECMAScriptとはJavaScriptの標準仕様。技術委員はブラウザベンダーやECMAScriptに関心のある企業などによって構成されており、仕様を検討・議論している。
ECMAScriptを見る必要がある場合は以下のケース。
- 仕様に基づいてJSは動いているため、仕様を読むことによりJSを正しく理解できる
- 現在の動向を把握する
- JSという言語を使用からきっちり学ぶ
参考:https://jsprimer.net/basic/ecmascript/
最新の機能を使いたい場合
- ブラウザやNode.jsで対応している場合にはそのまま利用可能
- Babelを利用して、新しい仕様を古い仕様へ変換する