ゆう's Blog
JavaScriptにおけるグローバル変数

<script>
const globalVar = "変数の値が変更されない";
let globalVar = "変数の値が変更される可能性がある";

let globalVar2;

function myFunction() {
    globalVar2 = "関数内で得られた変数をグローバル変数とする";
}
</script>

※ let、const キーワードを使用して宣言されたグローバル変数は、windowオブジェクトのプロパティとはなりません。

JavaScriptで、変数名を動的に生成したい

直接的にはできないが、オブジェクトのプロパティを使用して同様のことを行うことができる。

let obj = {};
for (let i = 0; i < 10; i++) {
    obj['key' + i] = i;
}

objという名前の空のオブジェクトを作成し、ループ内でkey0からkey9までのプロパティを動的に追加しています。各プロパティの値は、そのキーの末尾の数字と同じです。つまり、key0の値は0、key1の値は1、というようになります。
このオブジェクトのプロパティは、以下のようにアクセスできます:

console.log(obj.key0);  // 0
console.log(obj.key1);  // 1
// ...
console.log(obj.key9);  // 9

または、

console.log(obj['key0']);  // 0
console.log(obj['key1']);  // 1
// ...
console.log(obj['key9']);  // 9

これらの方法を使用すれば、JavaScriptでkey0=0、key1=1、…といった動的な変数を作成することができます。ただし、これらの"変数"は実際にはobjオブジェクトのプロパティであることを覚えておいてください。このため、objオブジェクトを介さないとアクセスできません。

無限スクロール

// コンテンツを取得する関数
function fetchContent() {
// ここでサーバーから新たなコンテンツを非同期で取得します。
// この例では、具体的な取得方法は省略しています。
}

// スクロールイベントのリスナーを設定
window.onscroll = function() {
// ユーザーがページの一番下までスクロールしたかどうかをチェック
if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
// ページの一番下までスクロールしたら、新たなコンテンツを取得
fetchContent();
}
};

テンプレートリテラル

JavaScriptのinnerHTMLプロパティは、改行を含む文字列を正しく解釈できません。しかし、代わりにテンプレートリテラルを使用することで、複数行の文字列を作成することができます。テンプレートリテラルはバッククォート(`)で囲まれた文字列で、改行や式の埋め込みが可能です。

target.innerHTML = `
<?php
echo '<select name="cat_select">';
foreach($select_data as $key => $value) {
echo '<option value="'.$key.'">'.$value[0].' ('.$value[1].')</option>';
}
echo '</select>';
?>
`;

キャプチャグループ

var color = "rgb(255, 0, 0)";
var colors = color.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);

colors = ["rgb(255, 0, 0)", "255", "0", "0"]

・\d+:\dは数字を表すメタ文字で、+は直前の文字が1回以上繰り返すことを表します。したがって、\d+は1つ以上の数字(0から9まで)の連続したシーケンスを表します。
・,:カンマを表します。
・\s*:\sは空白文字(スペース、タブ、改行など)を表すメタ文字で、*は直前の文字が0回以上繰り返すことを表します。したがって、\s*は0つ以上の空白文字の連繰り返しを表します。

したがって、全体として、この正規表現は「1つ以上の数字、カンマ、0つ以上の空白文字、1つ以上の数字、カンマ、0つ以上の空白文字、1つ以上の数字」というパターンを表します。

この正規表現は、RGB形式の色値(例:rgb(255, 0, 0))を解析するのに使用されます。この正規表現を使用すると、RGB値の各成分(赤、緑、青)を個別に抽出することができます。この正規表現は、JavaScriptのmatch関数と一緒に使用され、RGB値の各成分を抽出するための配列を返します。この配列の各要素は、正規表現の各キャプチャグループ(丸括弧で囲まれた部分)に対応します。

除算代入 (/=)

除算代入演算子 (/=) は変数を右オペランドの値で除算し、結果をその変数に代入します。

let a = 3;

a /= 2;
console.log(a);
// Expected output: 1.5

a /= 0;
console.log(a);
// Expected output: Infinity

a /= 'hello';
console.log(a);
// Expected output: NaN

代入演算子
+= 左辺の値に右辺の値を加算したものを代入 x = 3; x += 2 ➡︎ 5
-= 左辺の値から右辺の値を減算したものを代入 x = 3; x -= 2 ➡︎ 1
*= 左辺の値に右辺の値を乗算したものを代入 x = 3; x *= 2 ➡︎ 6
/= 左辺の値を右辺の値で除算したものを代入 x = 3; x /= 2 ➡︎ 1.5

JavaScriptのスプレッド構文

配列やオブジェクトを展開するために使用されます。

例えば、rgbが[r, g, b]という配列である場合、...rgbはr, g, bという個々の要素に展開されます。これは関数の引数として配列の要素を個々に渡すために便利です。

以下に具体的な例を示します:

let rgb = [123, 45, 67];

function printColors(r, g, b) {
console.log(`Red: ${r}, Green: ${g}, Blue: ${b}`);
}

// スプレッド構文を使用して配列の要素を関数の引数として渡す
printColors(...rgb); // "Red: 123, Green: 45, Blue: 67"と出力されます

この例では、printColors関数は3つの引数r, g, bを取ります。...rgbを使用することで、rgb配列の各要素がそれぞれの引数に対応するように関数に渡されます。

このように、スプレッド構文は配列やオブジェクトの要素を個々に操作する必要がある場合に非常に便利です。