UdemyでNode.jsの学習を始めました。 www.udemy.com
VSCodeのショートカット
操作概要 | Windows | macOS |
---|---|---|
行の削除 | Ctrl+Shift+K | ⇧⌘K |
次を検索 | F3 | ⌘G |
JavaScript基礎
コールバック関数について
- コールバック関数とは
関数の引数に渡す関数
function print(callback) { const result = callback(2) console.log(result) } function fn(number) { return number * 2 } // デバッグのために処理を止める記述 debugger // 開発者ツールのソースでステップインを押すと処理が進む print(fn) // 4 console.log(fn(2)) // 4
DOMとイベントリスナについて
- DOMとは
HTMLをJavaScript内から操作するためのオブジェクト
// # DOM // # DOM const h1Element = document.querySelector("h1") // 要素の内容を書き換えることができる h1Element.textContent = "変更後のタイトル" console.log(h1Element.textContent) console.dir // -> 要素の実態をJSON 状のツリーとして出力します。 { /* <h1> ... innerHTML: "開始時点コード" innerText: "開始時点コード" inputMode: "" isConnected: true isContentEditable: false lang: "" lastChild: #text "開始時点コード" lastElementChild: null localName: "h1" namespaceURI: "http://www.w3.org/1999/xhtml" nextElementSibling: <button><200b> nextSibling: #text "\n " nodeName: "H1" ... </h1> */ } // addEventListener // クリックした時にコールバック関数が渡される例 const btnElement = document.querySelector("button") btnElement.addEventListener("click", (e) => { console.log(e) // イベントの発火に伴う情報 console.log(e.target) // クリックした要素の情報プロパティ console.log("hello") }) // コールバック関数に予め定義したものを渡すことも可能 const callbackFn = (e) => { console.log(e) } btnElement.addEventListener("click", callbackFn)
Arrayオブジェクトのメソッドの使い方
mapメソッドの使い方
const arry = [10, 20, 30, 40] const newArry = [] for (let i = 0; i < arry.length; i++) { const val = arry[i] * 2 if (val > 50) { newArry.push(array[i] * 2) } } // 同様の記述がmapメソッドで可能 const newArry2 = arry.map((val) => val * 2) const newArry3 = newArry2.filter((val) => val > 50) // mapメソッドのコールバック関数に渡される引数 const newArry4 = arry.map((val, index, array) => { console.log(val, index) return val * 3 })
分割代入
// const [a, b, c] = ["配列1", "配列2", "配列3"] // 下記のようにカンマで省略することが可能 const [a, , c] = ["配列1", "配列2", "配列3"] console.log(a, c) // 配列1, 配列3 // オブジェクトはプロパティで管理されているので、 // 分割代入で格納する順番は関係ない const { x, z } = { x: "オブジェクト1", y: "オブジェクト2", z: "オブジェクト3" } console.log(x, z) // オブジェクト1, オブジェクト3 // 関数でも同じように扱える const fnArr = (country, state, city) => {{ ... } fnArr(arr) const fnObj = ({ country, state, city }) => { ... } fnObj(objAddress)
スプレッド演算子
const nums = [3, 1, 4, 1, 5, 10, 2, 6] // const result = Math.max(3, 1, 4, 1, 5, 10, 2, 6); // 配列を展開して渡すことができる const result = Math.max(...nums) console.log(result) // 10 let arr1 = [1, 2, 3] let arr2 = [4, 5, 6] let newArrA = [...arr1] let newArrB = arr1 console.log(newArrA === arr1) // false console.log(newArrB === arr1) // true // newArrAではarr1を参照しているから、newArrBとは違う出力になる // newArrAは、新しい配列が定義されている newArrA.push(4) console.log(newArrA, arr1) // [1, 2, 3, 4] [1, 2, 3, 4] <- 元の配列に追加されて同じ結果になる // 展開したものを連結することもできる newArrMerged = [...arr1, ...arr2, 10] console.log(newArrMerged) // [1, 2, 3, 4, 5, 6, 10] // オブジェクトも同様 const obj = { name: "Tom", age: 22, } const newObj = { ...obj } // newObj.name = 'John' console.log(newObj, obj) // { name: "Tom", age: 22 } // { name: "John", age: 22 } const restA = (...argA) => console.log(argA) restA(1, 3, 4) // [1, 3, 4] const restB = (n, ...argB) => console.log(argB) restB(1, 3, 4) // [3, 4]
三項演算子
const a = true let resultA = a ? "true" : "false" console.log(resultA) // true
truthyとfalsy
- falsy → 真偽値に変換した際に"偽(false)"とみなされる値のこと。
- truthy → それ以外
falsyな値の一覧
- false
- 0 (数字)
- 0n (big int)
- "" (空文字)
- null
- undefined
- NaN (Not a Number)
const falsy = 0 const truthy = 1 console.log(Boolean(truthy)) // true console.log(Boolean(falsy)) // false // 論理積 (&&) について const resultA = "" && "foo" console.log(resultA) // false // 理論和 (||) について const resultB = "" || "foo" console.log(resultD) // false
非同期処理 (Promise)
- 非同期処理とは
コードが記述された順番通りに行われない処理
let a = 0 setTimeout(function () { a = 1 console.log(a) }, 2000) new Promise((resolve, reject) => { setTimeout(() => { a = 1 if (a === 1) { // 解決できた時にコールバック関数を登録するもの resolve(a) } else { // エラーが発生した時にコールバック関数を登録するもの reject(a) } }, 2000) }) .then((b) => { // bには解決したaの値が渡ってくる console.log(b) return b }) .then((b) => { // thenメソッドは繋げて書ける console.log(b) }) .catch((c) => { console.log("catchが実行", c) })
非同期処理 (await / async)
let a = 0 init() // awaitが書かれた関数の前方にasyncをつける async function init() { // resolveが呼ばれるまで、awaitが書かれた行で待機する await new Promise((resolve, reject) => { setTimeout(() => { a = 1 resolve(a) }, 2000) }) console.log(a) // 1 }