Web開発の基本技術と実装手法

JavaScriptの基本データ型と操作

基本データ型(値型)にはString、Number、Boolean、Undefined、Nullが含まれます。参照型(複合データ型)はObject、Array、Dateなどです。値型はスタックに保存され、参照型はヒープに保存されます。

console.log(+'0');      // 数値型 0
console.log(1 + '0');    // 文字列型 "10"
console.log(2 * '10');   // 数値型 20

DOM操作と仮想DOM

DOM(Document Object Model)はHTMLドキュメントを操作するためのインターフェースです。仮想DOMは実際のDOMをJavaScriptオブジェクトで模擬し、効率的なUI更新を実現します。

<div data-custom="sample">要素</div>
const el = document.querySelector('[data-custom]');
console.log(el.dataset.custom);

JSONデータの変換

サーバーから受信したJSON文字列をJavaScriptオブジェクトに変換するにはJSON.parse()、逆にJavaScriptオブジェクトをJSON形式に変換するにはJSON.stringify()を使用します。

深コピーの実装方法

深コピーには再帰処理が効果的です。展開演算子やJSON.stringify()はネストされたオブジェクトやundefined値を処理できない点に注意が必要です。

function deepClone(target) {
  if (typeof target !== 'object' || target === null) return target;
  const clone = Array.isArray(target) ? [] : {};
  for (const key in target) {
    clone[key] = deepClone(target[key]);
  }
  return clone;
}

非同期処理の最適化手法

節流(throttle)は指定間隔内で一度のみ処理を実行し、防抖(debounce)は一定時間経過後に処理を実行します。

function throttle(func, delay) {
  let active = false;
  return (...args) => {
    if (active) return;
    active = true;
    func.apply(this, args);
    setTimeout(() => active = false, delay);
  };
}

function debounce(func, wait) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => func.apply(this, args), wait);
  };
}

HTTPステータスコードの分類

2xxは成功、3xxはリダイレクト、4xxはクライアントエラー、5xxはサーバーエラーを示します。201はリソース作成成功、401は認証エラー、503はサーバー過負荷を表します。

クロスオリジンリクエストの対策

ローカルサーバーを経由してリクエストを転送することで、ブラウザのセキュリティポリシーによる制限を回避できます。

イベントループの動作原理

同期タスクの実行後、マイクロタスク(Promise処理)を処理し、最後にマクロタスク(setTimeoutなど)を実行します。

async function async1() {
  console.log('async1 start');
  await async2();
  console.log('async1 end');
}
async function async2() {
  console.log('async2');
}
async1();
console.log('script start');
// 実行結果: async1 start → async2 → script start → async1 end

Fetch APIの利用方法

FetchはPromiseベースのHTTPリクエストAPIで、デフォルトはGETメソッドです。レスポンス処理にはthen/catchを使用します。

fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({ name: 'data' })
})
.then(response => response.json())
.then(data => console.log(data));

配列操作メソッドの違い

find()は条件に一致する要素を返却し、findIndex()はそのインデックスを返却します。includes()は文字列や配列に特定の値が含まれているかを判定します。

const arr = [{id: 1}, {id: 2}];
arr.find(item => item.id === 2); // {id: 2}
arr.findIndex(item => item.id === 2); // 1

ジェネレータ関数の基本

ジェネレータ関数はyieldキーワードで処理を一時停止し、再開できます。非同期処理の可読性向上に役立ちます。

function* generator() {
  const a = yield '処理1';
  const b = yield '処理2';
  console.log(a, b);
}
const gen = generator();
console.log(gen.next().value); // 処理1
console.log(gen.next('引数1').value); // 処理2

CDNとURIエンコーディング

CDN(コンテンツ配信ネットワーク)はユーザー近接サーバーでコンテンツをキャッシュし、高速配信を実現します。encodeURIはURI全体をエンコードし、encodeURIComponentはURIパーツをエンコードします。

タグ: javascript dom event-loop http-status-codes cross-origin

6月12日 20:25 投稿