JavaScript
#フロントエンド #tech📝
JavaScript のスレッド並列実行環境
現代の JavaScript チュートリアル
ブックマークレット
code: (js)
javascript:(function(){
// ここに書く
}())
文法
try...catch 文 - JavaScript | MDN
JavaScript 高階関数を説明するよ - Qiita
ググりにくい文法
JavaScriptを読んでて「なにこれ!?」と思うけれど調べられない記法8選。 - Qiita (ちょっと古い気がする)
Operator Lookup - Search JavaScript operators · Josh W Comeau わからない記号があったときに使える 便利
分割代入 - JavaScript | MDN
スプレッド構文 - JavaScript | MDN
アロー関数 - JavaScript | MDN
function* - JavaScript | MDN
ジェネレータ関数 (Generator オブジェクトを返す関数) を定義
参考: イテレーターとジェネレーター - JavaScript | MDN
Null合体演算子 - JavaScript | MDN
IIFE (即時実行関数式) - MDN Web Docs 用語集: ウェブ関連用語の定義 | MDN
JavaScriptで即時関数を使う理由 - Qiita
タグつきテンプレート
code: (js)
// 関数の宣言と定義
function someFunction(strings, val) {
// 処理
}
// 呼び出し
const x = 'po'
someFunctionsometext${x}
テンプレートリテラル (テンプレート文字列) - JavaScript | MDN
テンプレートリテラル - TypeScript Deep Dive 日本語版 #タグ付きテンプレート
基本文法・式
制御フローとエラー処理 - JavaScript | MDN
式と演算子 - JavaScript | MDN
関数 - JavaScript | MDN
関数式・無名関数
変数名
JavaScript の識別子は必ずアルファベットかアンダースコア (_) かドル記号 ($) から始まらなくてはなりません。続く文字は数字 (0-9) も使えます。JavaScript は大文字・小文字を区別するため、使えるアルファベットは "A" から "Z"(大文字)と "a" から "z"(小文字)です。変数 - JavaScript | MDN
よくある慣習
DOMオブジェクトを入れる場合は $ を先頭につける
$someHeader, $nameInput みたいな
privateな変数・関数は先頭に _ をつける
$, _ は単体でも変数名として使われる
正規表現 (これはjs以外と同じ)
ライブラリ
lodash
jQuery
fetch API
code: (javascript)
veryLongText = ''
decoder = new TextDecoder()
url = 'https://example.com'
;(async function () {
await fetch(url)
.then(res => res.body.getReader())
.then(reader => {
// ReadableStream.read()はPromiseを返す。
// Promiseは{ done, value }として解決される。
// データを読み込んだとき:doneはfalse, valueは値。
// データを読み込み終わったとき:doneはtrue, valueはundefined。
function readChunk({done, value}) {
if(done) {
// 読み込みが終わっていれば最終的なテキストを表示する。
console.log(veryLongText)
return
}
veryLongText += decoder.decode(value)
// 次の値を読みにいく。
reader.read().then(readChunk)
}
// 最初の値を読み込む。
reader.read().then(readChunk)
return
})
}());
tips
KeyboardEvents
Key Values - Web API | MDN
キーイベントで送られてくる KeyboardEvent.key の一覧
入力に応じて入力欄の大きさを変える
npm
https://github.com/traPtitech/traQ-UI/blob/master/src/components/Main/MessageView/MessageInput.vue#L602
window
window.navigator.language
ウィンドウの言語設定を取得
window.innerWidth
ウィンドウ幅を取得
さいきょうの二重サブミット対策
正規表現
Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript
正規表現 - JavaScript | MDN
JavaScript 正規表現まとめ - Qiita
code: (javascript)
const pattern = /正規表現/オプション;
const pattern2 = new RegExp('正規表現','オプション');
code: (javascript)
const str = 'poyopoyo'
str.match(pattern) // string[] マッチする文字列の配列を返す
pattern.test(str) // boolean マッチする文字列があるかどうかを返す
Date
new Date('2019/02/28') の文字列パースはブラウザ別で実装が違っていてバグになりうるので、ISO8601形式に沿った形の文字列を入れたほうがいい
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
Axios
エラーハンドリング
公式ドキュメント Handling Errors
エラーのレスポンス内容は返ってきたオブジェクトの中の response にある
code: (javascript)
axios.get('/user/12345')
.catch(function (error) {
if (error.response) {
// The request was made and the server responded with a status code
// that falls out of the range of 2xx
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
// The request was made but no response was received
// error.request is an instance of XMLHttpRequest in the browser and an instance of
// http.ClientRequest in node.js
console.log(error.request);
} else {
// Something happened in setting up the request that triggered an Error
console.log('Error', error.message);
}
console.log(error.config);
});