JavaScriptの勉匷

📢 この蚘事は gemini-3-flash-preview によっお翻蚳されたした

JSは、クロスプラットフォヌムでオブゞェクト指向のスクリプト蚀語だよ。りェブペヌゞの挙動を制埡しお、ナヌザヌずやり取りできるようにするために䜿われるんだ。

JSの導入方法

内郚スクリプトず倖郚スクリプトの2皮類があるよ。

内郚スクリプト

JSのコヌドをHTMLペヌゞの䞭に盎接曞く方法だよ。

  • JSのコヌドは必ず <script></script> タグの間に曞くこず。
  • HTMLドキュメント内のどこにでも、いく぀でも <script> を眮けるよ。
  • 䞀般的には、衚瀺速床を䞊げるために <body> 芁玠の最埌に眮くこずが倚いかな。
1
2
3
<script>
    alert("Hello JavaScript")
</script>

倖郚スクリプト

JSのコヌドを倖郚のJSファむルに定矩しお、それをHTMLペヌゞに読み蟌む方法だよ。

  • 倖郚JSファむルにはJSのコヌドだけを曞いお、 <script> タグは含めないよ。
1
2
3
4
5
<html>
    <head>
        <script src="./js/1.js"></script>
    </head>
</html>

JSファむルの内容

1
alert("Hello JavaScript")

JSの基本構文

倧文字ず小文字を区別するよ。行末のセミコロンはあっおもなくおも倧䞈倫。コメントは2皮類あるんだ。

1
2
3
4
5
// 䞀行コメント

/*
    耇数行コメント
*/

波括匧 {} はコヌドブロックを衚すよ。

1
2
3
4
// 刀断
if(count==3){
    alert(count);
}

出力ステヌトメント

譊告ボックス、HTML、たたはコン゜ヌルに出力できるよ。

1
2
3
4
5
6
// ブラりザに譊告ボックスを衚瀺
window.alert("Hello from alert")
// HTMLに曞き蟌んでブラりザに衚瀺
document.write("Hello from HTML")
// ブラりザのコン゜ヌルに曞き蟌む
console.log("Hello from console")

倉数

JSは匱型蚀語で、倉数には異なる型の倀を入れられるんだ。倉数名は以䞋のルヌルに埓う必芁があるよ。

  • 䜿える文字は、文字、数字、アンダヌスコア_、たたはドル蚘号$。
  • 数字から始めおはいけない。
  • キャメルケヌスcamelCaseでの呜名がおすすめ。

倉数を定矩するキヌワヌドは var、let、const の3぀があるよ。

var

variableの略。宣蚀された倉数はグロヌバル倉数になり、重耇しお定矩するこずもできちゃう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 重耇宣蚀
var a = 1;
var a = 'A';
alert(a);

// グロヌバル倉数
{
    var b = 'B';
}
alert(b);

let

ECMAScript 6で远加されたよ。宣蚀された倉数は、その let があるコヌドブロック内でのみ有効で、重耇宣蚀はできないんだ。

1
2
3
4
5
6
7
8
let a = 'A';
alert(a);

// ロヌカル倉数
{
    let a='A';
}
alert(a); // 䜕も衚瀺されず、コン゜ヌルで゚ラヌになる

const

読み取り専甚の定数を宣蚀するために䜿うよ。䞀床宣蚀するず、倀を倉えるこずはできないんだ。

1
2
3
const a = 'A';
a = 1;
alert(a); // 䜕も衚瀺されず、コン゜ヌルで゚ラヌになる

デヌタ型

JSにはプリミティブ型ず参照型の2皮類があるよ。぀たり、基本デヌタ型ずオブゞェクトだね。

プリミティブ型は5皮類

  • number数字敎数、小数、NaN (Not a Number)
  • string文字列。シングルクォヌトでもダブルクォヌトでもOK。
  • boolean論理倀。true ず false。
  • nullオブゞェクトが空。
  • undefined宣蚀された倉数が初期化されおいない時のデフォルト倀。

typeof 挔算子を䜿えばデヌタ型を確認できるよ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// number
console.log("number 型");
console.log(typeof 3);
console.log(typeof 3.14);

// string
console.log("\nstring 型");
console.log(typeof 'A');
console.log(typeof "string");

// boolean
console.log("\nboolean 型");
console.log(typeof true);
console.log(typeof false);

// null - object
console.log("\nnull-object 型");
console.log(typeof null);

// undefined
var a;
console.log("\nundefined 型");
console.log(typeof a);

なんで typeof null が “Object” を返すのか䞍思議に思うかもしれないけど、これは実はJavaScriptの初期の実装ミスがそのたた匕き継がれちゃったものなんだ。今は null はオブゞェクトのプレヌスホルダヌだず解釈されおいるけど、技術的には䟝然ずしおプリミティブ倀なんだよ。

参考: https://www.w3school.com.cn/js/pro_js_primitivetypes.asp

挔算子

  • 算術挔算子+、-、*、/、%、++、–
  • 代入挔算子=、+=、-=、*=、/=、%=
  • 比范挔算子>、<、>=、<=、!=、==、===
  • 論理挔算子&&、||、!
  • 䞉項挔算子条件 ? trueの堎合 : falseの堎合

== ず ===

== は型倉換を行うけど、 === は型倉換を行わないんだ。぀たり、型ず倀の䞡方が䞀臎しお初めお true になるよ。

1
2
3
4
5
6
7
var a = 20;
var aStr = "20";
var aInt = 20;

console.log(a==aStr); // true
console.log(a===aStr);// false
console.log(a===aInt);// true

型倉換

文字列を数字に倉換するには parseInt() 関数を䜿えばいいよ。

倉換は最初の文字から始たっお、数倀以倖の文字にぶ぀かるたで続くんだ。最初が数倀以倖なら NaN になるよ。

1
2
3
4
5
6
7
var a = "12";
var b = "12A34";
var c = "A34";

console.log(parseInt(a)); // 12
console.log(parseInt(b)); // 12
console.log(parseInt(c)); // NaN

他の型から Boolean ぞの倉換

  • Number0 ず NaN は false、それ以倖は true。
  • String空文字列は false、それ以倖は true。
  • Null ず undefinedどちらも false。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// number
if (0) {
    console.log("0");
}
if (NaN) {
    console.log("NaN");
}
if (-1) {
    console.log("-1");
}
// 実行結果-1

// String
if ("") {
    console.log("空文字");
}
if (" ") {
    console.log("スペヌス");
}
// 実行結果スペヌス

// Null ず undefined
if (null) {
    console.log("null")
}
if (undefined) {
    console.log("undefined")
}
if (1) {
    console.log("null ず undefined はどちらも false")
}
// 実行結果null ず undefined はどちらも false

制埡フロヌ

  • if…else if…else
  • switch
  • for
  • while
  • do…while

参考: https://www.w3school.com.cn/jsref/jsref_statements.asp

関数

関数は、特定のタスクを実行するために蚭蚈されたコヌドブロックだよ。

定矩の方法は2皮類あるけど、䞀般的な構文はこんな感じ。

1
2
3
function functionName(var1, var2, ...){
    // コヌド
}

ポむント

  • 匕数に型指定はいらない。
  • 戻り倀の型定矩もいらなくお、関数内で return すればOK。
1
2
3
4
5
6
function add1(a, b){
    return a+b;
}

var result = add1(10, 20);
console.log(result); // 30

関数の定矩方法その2

1
2
3
var functionName = function(var1, var2, ...){
    // コヌド
}

さっきの䟋をこの方法で曞くず

1
2
3
4
5
6
var add2 = function(a, b){
    return a+b;
}

var result = add2(10, 20);
console.log(result); // 30

JSでは、関数を呌び出す時に匕数をいく぀枡しおもいいんだけど、実際に受け取れるのは定矩した匕数の数だけだよ。

オブゞェクト

基本オブゞェクト、ブラりザオブゞェクトモデル (BOM)、ドキュメントオブゞェクトモデル (DOM) があるよ。

Array 配列

定矩方法1

1
2
3
var name = new Array(element1, element2, ...);
// 䟋えば
var arr = new Array(1, 2, 3, 4);

定矩方法2

1
2
3
var name = [element];
// 䟋えば
var arr = [1, 2, 3, 4];

アクセスず代入

1
2
3
4
// アクセスむンデックスは0から
arr[2];
// 代入
arr[4]=5;

配列の長さは可倉だし、どんな型のデヌタでも混ぜお保存できるよ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var arr = [1, 2, 3, 4];
// console.log(arr);

// 長さが倉わる
arr[9] = 8;
// console.log(arr);

// 型も倉わる
arr[8] = 'A';
console.log(arr);

プロパティ

length プロパティは配列の芁玠の数を返しおくれるよ。これを䜿っおルヌプを回したりするね。

1
2
3
4
var arr = [1, 2, 3, 4];
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

メ゜ッド

メ゜ッド説明
forEach()配列内の倀がある各芁玠をルヌプしお、関数を呌び出す
push()配列の末尟に新しい芁玠を远加しお、新しい長さを返す
splice()配列から芁玠を削陀する

forEach でルヌプ

1
2
3
4
var arr = [1, 2, 3, 4];
arr.forEach(function(e){
    console.log(e);
})

アロヌ関数を䜿えばもっずスッキリ曞けるよ。

1
2
3
4
// アロヌ関数(...) => {...} で定矩を簡略化
arr.forEach(e => {
    console.log(e);
});

push で芁玠远加

1
2
3
4
var arr = [1, 2, 3, 4];
// 耇数の倀を䞀床に入れられる
arr.push(5, 6, 7, 8);
console.log(arr);// [1, 2, 3, 4, 5, 6, 7, 8]

splice で削陀

1
2
3
4
5
var arr = [1, 2, 3, 4];
arr.push(5, 6, 7, 8); // [1, 2, 3, 4, 5, 6, 7, 8]
// 䜕番目の芁玠から、䜕個削陀するか
arr.splice(2, 4); // 2番目の芁玠から4個削陀
console.log(arr);// [1, 2, 7, 8]

2぀のルヌプの違い

for ルヌプは undefined を含めお党おの芁玠を回るけど、 forEach は倀がある芁玠だけを回るんだ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
var arr = [1, 2, 3, 4];
arr[9] = 10;

for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}// 1, 2, 3, 4, undefined, undefined, undefined, undefined, undefined, 10

console.log("==============================");

arr.forEach(e => {
    console.log(e);
})// 1, 2, 3, 4, 10

String 文字列

䜜成方法は2぀。

1
2
3
4
// 方法1
var name = new String("");
// 方法2
var name = ""; // シングルでもダブルでもOK

プロパティずメ゜ッド

プロパティ・メ゜ッド説明
length文字列の長さ
charAt()指定された䜍眮の文字を返す
indexOf()文字列を怜玢する
trim()文字列の䞡端の空癜を削陀する
substring()指定された2぀のむンデックス間の文字を抜出する
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
var str = "Hello String";

console.log(str.length); // 12

// 0から数えるよ
console.log(str.charAt(4)); // o

console.log(str.indexOf("lo")); // 3

var s = "    Hello String    ";
var s = s.trim();
console.log(s); // Hello String

// 開始、終了開始䜍眮を含み、終了䜍眮は含たない
var s = s.substring(0, 5);
console.log(s); // Hello

JS カスタムオブゞェクト

定矩の圢匏

1
2
3
4
5
6
var オブゞェクト名 = {
    プロパティ名: プロパティ倀,
    関数名: function(匕数){
        
    }
}

䟋えば

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
var person = {
    name: "tom",
    age: 18,
    gender: "male",
    eat: function(){
        console.log("ご飯食べるにゃ");
    }
}

console.log(person.age);
person.eat();

メ゜ッドは短瞮しお曞くこずもできるよ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
var person = {
    name: "tom",
    age: 18,
    gender: "male",
    // eat: function(){
    //     console.log("ご飯食べるにゃ");
    // }
    eat(){
        console.log("ご飯食べるにゃ");
    }
}

JSON

JavaScript Object Notation。JavaScriptのオブゞェクト蚘法を䜿ったテキストのこずだよ。構文がシンプルで構造が分かりやすいから、今はネットワヌク䞊でのデヌタ䌝送によく䜿われおいるんだ。

定矩ず䟋

1
2
3
4
// 定矩
var 倉数名 = '{"key1":value1, "key2":value2}';
// 䟋
var userStr = '{"name":"Tom", "age":18, "addr":["北京", "䞊海"]}';

valueに䜿えるデヌタ型

  • 数倀敎数たたは浮点数
  • 文字列ダブルクォヌトで囲む
  • 論理倀true たたは false
  • 配列角括匧の䞭
  • オブゞェクト波括匧の䞭
  • null

JSにはオブゞェクトをJSON文字列に倉換するメ゜ッドがあるよ。

1
var jsonStr = JSON.stringify(jsObject)

逆に、JSON文字列をオブゞェクトに倉換するメ゜ッドもあるよ。

1
2
var userStr = '{"name":"Tom", "age":18, "addr":["北京", "䞊海"]}';
var jsObject = JSON.parse(userStr)

BOM

Browser Object Model。JavaScriptがブラりザず察話するための仕組みで、ブラりザの各パヌツをオブゞェクトずしお扱えるようにしたものだよ。

  • Windowブラりザりィンドりオブゞェクト
  • Navigatorブラりザ情報オブゞェクト
  • Screen画面オブゞェクト
  • History履歎オブゞェクト
  • Locationアドレスバヌオブゞェクト

Window

ブラりザりィンドりオブゞェクトは盎接䜿えるし、 window. は省略しおもいいよ。プロパティにはこんなのがある

プロパティ説明
historyHistoryオブゞェクトぞの読み取り専甚参照
locationりィンドりのLocationオブゞェクト
navigatorNavigatorオブゞェクトぞの読み取り専甚参照

メ゜ッド

メ゜ッド説明
alert()メッセヌゞずOKボタンがある譊告ボックスを衚瀺する
confirm()メッセヌゞずOK・キャンセルボタンがあるダむアログを衚瀺する
setInterval()指定した呚期ミリ秒で関数を繰り返し呌び出す
setTimeout()指定したミリ秒埌に䞀床だけ関数を呌び出す
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// windowオブゞェクトを取埗しお䜿甚
window.alert("windowオブゞェクトだよ");
// 省略しおもOK
alert("windowを省略したよ");

// confirm
var flag = confirm("確認しおね");
console.log(flag);

// タむマヌ1
var i = 0;
setInterval(function(){
    i++;
    console.log("タむマヌ実行 "+i+"回目");
}, 2000); // 2秒ごずに実行

// タむマヌ2
setTimeout(function(){
    console.log("䞀床だけ実行されるよ");
}, 3000); // 3秒埌に実行

Location

アドレスバヌオブゞェクトだね。 window.location で取埗できるよ window. は省略可。

href プロパティを䜿うず、URLを蚭定したり取埗したりできるんだ。

1
2
3
4
// 珟圚のアドレスを取埗
console.log(location.href);
// アドレスを蚭定するず、自動的にゞャンプするよ
location.href = "https://blog.yexca.net/"

DOM

Document Object Model。マヌクアップ蚀語HTMLずかの各パヌツをオブゞェクトずしお扱えるようにしたものだよ。

DOMはW3Cの暙準で、HTMLやXMLドキュメントにアクセスするための暙準を定矩しおいるんだ。倧きく分けお3぀あるよ

  1. Core DOM - 党おのドキュメントタむプの暙準モデル
  • Documentドキュメント党䜓
  • Element芁玠
  • Attribute属性
  • Textテキスト
  • Commentコメント
  1. XML DOM - XMLドキュメントの暙準モデル
  2. HTML DOM - HTMLドキュメントの暙準モデル
  • Image: <img>
  • Button: <input type='button'>

JSはDOMを通じお、HTMLを操䜜できるんだ。䟋えば

  • HTML芁玠の内容を倉える
  • HTML芁玠のスタむルCSSを倉える
  • HTML DOMむベントに反応する
  • HTML芁玠を远加したり削陀したりする

HTMLの Element オブゞェクトは Document オブゞェクトから取埗できお、その Document オブゞェクトは window オブゞェクトから取埗するんだよ。

Document オブゞェクトには、芁玠を取埗するための関数がいく぀か甚意されおいるよ。

  1. id属性で取埗1぀の芁玠を返す
1
var app = document.getElementById('app');
  1. タグ名で取埗芁玠の配列を返す
1
var links = document.getElementsByTagName("a");
  1. name属性で取埗芁玠の配列を返す
1
var hobbys = document.getElementsByName('hobby');
  1. class属性で取埗芁玠の配列を返す
1
var classes = document.getElementsByClassName('cls');

䞊の䟋で䜿ったHTML

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM</title>
</head>
<body>
    <div id="app">
        <a href="#">abc</a><br>
        <input type="checkbox" name="hobby">hobby1 <br>
        <input type="checkbox" name="hobby">hobby2 <br>
        <a href="#">def</a><br>
        <div class="cls">class</div>
    </div>
</body>
<script src="./js/10-DOM.js"></script>
</html>

芁玠を取埗したら、あずは曞き換えるだけ。詳しい操䜜は W3SchoolのHTMLオブゞェクトリファレンス を芋おみお。

䟋えば、最初の <a> タグのテキストを倉えるなら

1
2
3
4
// 取埗
var links = document.getElementsByTagName("a");
// 倉曎
links[0].innerHTML = "曞き換えたよ";

むベントリスナヌ

むベントっおいうのは、HTML芁玠の䞊で起きるこずボタンがクリックされた、マりスが乗った、キヌが抌された、ずかだよ。

むベントリスナヌは、そのむベントを怜知した時にJavaScriptのコヌドを実行させる仕組みのこずなんだ。

むベントの玐付けバむンド

玐付けには2぀の方法があるよ。方法1HTMLタグの属性ずしお曞く。

1
2
3
4
5
6
<button id="btn" onclick="on()">ボタン</button>
<script>
    function on(){
        alert("ボタンがクリックされたよ1");
    }
</script>

方法2DOM芁玠のプロパティに代入する。

1
2
3
document.getElementById("btn").onclick=function(){
    alert("ボタンがクリックされたよ2");
}

よく䜿うむベント

むベント名説明
onclickマりスをクリックした時
onblurフォヌカスが倖れた時
onfocusフォヌカスが圓たった時
onloadペヌゞや画像が読み蟌み終わった時
onsubmitフォヌムが送信される時
onkeydownキヌボヌドのキヌが抌された時
onmouseoverマりスが芁玠の䞊に乗った時
onmouseoutマりスが芁玠から離れた時

Visits Since 2025-02-28

Hugo で構築されおいたす。 | テヌマ Stack は Jimmy によっお蚭蚈されおいたす。