1. URLからGETパラメータを抽出する
以下のJavaScript関数は、URLからGETパラメータを抽出し、キーと値のペアでJSONオブジェクトとして返します。
function extractQueryParams(url) {
const params = {};
const query = url.split('?')[1];
if (query) {
const pairs = query.split('&');
for (const pair of pairs) {
const [key, value] = pair.split('=');
params[key] = decodeURIComponent(value || '');
}
}
return params;
}
2. RegExp構築方法の違いとメールアドレスの正規表現
RegExp構築子とリテラル形式の主な違いは、エスケープ文字の扱いとパフォーマンスです。リテラル形式の方が効率的です。
メールアドレスの正規表現:
const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
3. ページ内の全てのチェックボックスを取得する
const inputs = document.getElementsByTagName('input');
const checkboxes = [];
for (let i = 0; i < inputs.length; i++) {
if (inputs[i].type === 'checkbox') {
checkboxes.push(inputs[i]);
}
}
4. DOM操作: ノードの追加、削除、移動、複製、作成、検索
- ノードの作成
document.createDocumentFragment(): DOMフラグメントを作成document.createElement(tagName): 要素を作成document.createTextNode(text): テキストノードを作成
- ノードの操作
appendChild(node): 子ノードを追加removeChild(node): 子ノードを削除replaceChild(newNode, oldNode): 子ノードを置換insertBefore(newNode, referenceNode): 既存の子ノードの前に新しい子ノードを挿入
- ノードの検索
getElementsByTagName(tagName): タグ名で要素を取得getElementsByName(name): 名前属性で要素を取得getElementById(id): IDで要素を取得
5. 各リストアイテムのインデックスを表示する(クロージャ)
const ul = document.getElementById('test');
const lis = ul.getElementsByTagName('li');
for (let i = 0; i < lis.length; i++) {
lis[i].index = i;
lis[i].onclick = (function(index) {
return function() {
alert(index);
};
})(i);
}
6. ノードのドラッグアンドドロップの実装
以下がドラッグアンドドロップの基本的なステップです:
- ドラッグ対象のノードに
mousedown,mousemove,mouseupイベントをバインド mousedownイベントでドラッグ開始mousemoveイベントで現在の位置を更新mouseupイベントでドラッグ終了- ブラウザの境界を考慮する
7. AMDとCMDの違い
- AMDは依存モジュールを事前に読み込み、CMDは遅延読み込み
- CMDは依存性を近接させる、AMDは依存性を前方に配置
- CMDはAPIの役割を明確に分ける
8. ECMAScript 6 のクラスの定義
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return `(${this.x}, ${this.y})`;
}
}
9. call() と apply() の意味と違い
applyは配列形式の引数を受け取り、callは個別の引数を受け取ります。どちらもthisの値を変更します。
10. 配列とオブジェクトのネイティブメソッド
Arrayのメソッド:
concat(): 配列を結合join(): 配列要素を文字列に結合length: 配列の長さpop(): 最後の要素を削除して返すpush(): 配列に要素を追加reverse(): 配列の順序を逆転shift(): 最初の要素を削除して返すslice(): 配列の一部を返すsort(): 配列をソートsplice(): 配列の要素を挿入、削除、または置換toLocaleString(): 配列をローカル文字列に変換toString(): 配列を文字列に変換unshift(): 配列の先頭に要素を追加
Objectのメソッド:
hasOwnProperty(): プロパティが直接持つかどうかisPrototypeOf(): オブジェクトが別のオブジェクトのプロトタイプかどうかpropertyIsEnumerable(): プロパティが列挙可能かどうかtoLocaleString(): オブジェクトをローカル文字列に変換toString(): オブジェクトを文字列に変換valueOf(): オブジェクトの原始値を返す
11. JavaScriptのプロトタイプとプロトタイプチェーン
プロトタイプチェーンは、継承と共有プロパティのために使用されるオブジェクトの連鎖です。
function clone(proto) {
function Dummy() {}
Dummy.prototype = proto;
Dummy.prototype.constructor = Dummy;
return new Dummy();
}
function object(oldObj) {
function F() {}
F.prototype = oldObj;
return new F();
}
const newObj = object(oldObj);
12. 非同期読み込みの方法
defer属性: IEのみサポートasync属性: スクリプトの非同期読み込み- スクリプトタグの動的生成とDOMへの挿入
document.writeとinnerHTMLの違い:
document.write: ページ全体を再描画innerHTML: ページの一部を再描画
13. == と === の違い
==は型変換後に比較し、===は型変換なしで直接比較します。