Skip to content

JavaScript

JavaScript は、ブラウザの動作を制御する、クロスプラットフォームのオブジェクト指向スクリプト言語です。

導入方法

HTML ファイルでは、<script> タグで JavaScript コードを囲みます。形式は次の通りです。

html
<!DOCTYPE html>
<html>
    <body>
    <!-- ここは HTML の内容 -->
        <script>
            // ここに JavaScript コードを書く
            function sayHello() {
              alert('Hello, World!');
            }
            sayHello();
        </script>
    </body>
</html>

一般的には、内部スクリプトは <body> タグの下部に置くことをすすめます。

外部 JS ファイルを読み込む場合:

たとえば demo.js という独立した .js ファイルがあります。

js
function multiply(num1, num2) {
  return num1 * num2;
}
html
<!DOCTYPE html>
<html>
	<head></head>
    <body>
      <button onclick="alert(multiply(5, 3))">積を計算</button>
      <script src="../js/demo.js"></script>
    </body>
</html>

構文

基本文法

  • Java と同じように、変数名、関数名、その他の名前は大文字小文字を区別します。
  • 各行の末尾のセミコロンは、あってもなくてもよいです。
  • 波括弧はコードブロックを表します。
js
if (count == 3) {
	alert(count);
}
  • 出力文
js
window.alert() を使う		// 警告ボックスへ出力。window. は省略できる
document.write() を使う	// HTML 出力へ書き込む
console.log() を使う		// ブラウザのコンソールへ出力
  • コメント
js
// 一行コメント

/* 複数行
コメント */

変数

  • var キーワード(variable の略)で変数を宣言します。
  • JavaScript は弱い型付けの言語です。変数には異なる型の値を入れられます。
js
var test = 20;
test = "山田";

変数は次の規則に従います。

  • 使用できる文字は、英字、数字、アンダースコア(_)、$ です。
  • 数字から始めることはできません。
  • camelCase を使うことをすすめます。

特殊な変数宣言:

var

  1. スコープ:グローバル変数として扱われ、コードブロック外からも読めます。
  2. 重複定義できます。
js
var age = 30;
var age = 20;

let

  1. スコープ:ローカル変数です。
  2. 一度だけ定義できます。

const

  1. 読み取り専用の定数を宣言します。一度宣言すると、値は変更できません。

データ型

プリミティブ型と参照型があります。

データ型説明
number数値(整数、小数、NaN (Not a Number))
string文字、文字列。シングルクォートとダブルクォートのどちらも使えます
boolean真偽値(true または false)
nullオブジェクトが空であることを表します
undefined宣言した変数が初期化されていない場合のデフォルト値です

注:typeof 演算子を使うとデータ型を取得できます。

代入演算子

演算子説明
=右側の値を左側の変数に代入します。
+=変数に加算を行い、その結果を変数へ代入します。
-=変数に減算を行い、その結果を変数へ代入します。

関係演算子

演算子説明
==比較時に、まず型が同じかを判断します。違う場合は型変換を行い、その後で値を比較します。
===(厳密等価)型が違う場合は直接 false を返します。型が同じ場合だけ値を比較します。

三項演算子

式の形式説明
条件式 ? true_value : false_value条件式を評価し、値が true なら true_value を返し、false なら false_value を返します。

データ型変換

1. string 型から number 型へ

  • 文字列の字面に従って数値へ変換します。字面が数値でない場合は NaN(Not a Number)になります。
  • 一般的には parseInt() メソッドを使います。parseInt() 関数は文字列の先頭から解析し、数字以外の文字に会うと止まり、解析できた整数値を返します。
js
let num1 = parseInt("123");
console.log(num1); // 出力:123

let num2 = parseInt("123abc");
console.log(num2); // 出力:123。文字 'a' に会うと解析を止める

let num3 = parseInt("abc");
console.log(num3); // 出力:NaN。先頭が数字ではないため

parseInt() のほかに parseFloat() メソッドもあります。これは小数を含む数値を解析できます。

js
let num4 = parseFloat("3.14");
console.log(num4); // 出力:3.14

let num5 = parseFloat("3.14abc");
console.log(num5); // 出力:3.14。数字以外の文字に会うと小数部分の解析を止める

boolean 型から number 型へ

true1false0 に変換されます。

number 型から boolean 型へ

0NaNfalse に変換され、その他の数値は true に変換されます。

string 型から boolean 型へ

空文字列("")は false に変換され、その他の文字列は true に変換されます。

null 型と undefined 型から boolean 型へ

常に false に変換されます。

制御文

java と同じです。

js
if () {	}

for (; ; ) {}

switch(){}

while

do...while

関数

関数(メソッド)は、特定の処理を行うコードブロックです。

定義:

JavaScript の関数は function キーワードで定義します。

js
// JavaScript は弱い型付けの言語なので、仮引数に型は不要
function functionName(引数1引数2...){
	コードブロック
}

// 戻り値の型を定義する必要はなく、関数内で return すればよい
function add(a,b){
	return a + b;
}

// 定義方法2
var functionName = function(引数リスト){
	// 実行するコード
}
var add = function(a,b){
	return a + b;
}

呼び出し:

js
// 関数呼び出しでは任意の数の引数を渡せる
let result = add(1,2,3);

オブジェクト(重要)

基本オブジェクト概要

JavaScript では、重点的に見るべき基本オブジェクトがいくつかあります。Array(配列)、String(文字列)、JSON(JavaScript Object Notation)、ブラウザオブジェクトモデル(BOM)、ドキュメントオブジェクトモデル(DOM)、そして自分で定義できるオブジェクトです。

Array

  • 宣言方法
    • 方法一var 変数名 = new Array();。空配列を作ります。
    • 方法二var 変数名 = [要素リスト];
  • 要素アクセス:インデックスで配列要素にアクセスします。形式は arr[インデックス] = 値; です。
  • 特徴:長さも型も可変です。いつでも要素を追加・削除でき、配列内には異なる型のデータを入れられます。例:[1, "hello", true]
  • 属性:
    • length:配列要素の数を設定、または返します。
  • メソッド:
    • forEach():配列内の値を持つ各要素を走査し、渡した関数を一回ずつ呼び出します。例:
javascript
let arr = [1, 2, 3];
arr.forEach((e) => {
    console.log(e);
});
  • push():新しい要素を配列の末尾に追加し、新しい長さを返します。
  • splice(開始インデックス, 削除数):配列から要素を削除します。
js
// 要素を削除
array.pop()  // 配列の最後の要素を削除
array.shift()  // 配列の最初の要素を削除
array.splice(int index,int deleteCount)  // index から deleteCount 個の要素を削除

// 配列を切り出す
let arrM = array.slice(int start,int end)  // start から end までを切り出す。左閉右開

// 配列を結合
arr1,arr2
let arr3 = arr1.concat(arr2)

// 文字列から配列へ
let str = 'abc,defg'
let arr = str.split('') // 各文字を配列の一要素に変換
let arr = str.split(',') // カンマを区切り文字として文字列を配列に分割

// 配列から文字列へ
let arr = ['a','b','c']
let str = arr.join('') // 配列を文字列に変換し、間には空文字を入れる

// 配列をソート
let arr = [1,2,3,4,5]
arr.sort() // 昇順。デフォルトでは unicode コード順でソート
// アラビア数字としてソートしたい場合は次のように書く
arr.sort(function(a,b){return a-b})
arr.sort((a,b) => a-b)
// 逆順
arr.reverse()
arr.reverse((a,b) => b-a)

String

  • 宣言方法:
    • 方法一var 変数名 = new String("...");
    • 方法二var 変数名 = "..."。こちらのほうがよく使われます。例:var str2 = "world";
  • 属性:
    • length:文字列の長さを表します。
  • メソッド:
    • charAt(添字):指定位置の文字を返します。
    • indexOf("文字列"):文字列を検索し、最初に現れたインデックスを返します。存在しない場合は -1 を返します。
    • trim():文字列の両端の空白を削除し、新しい文字列を返します。
    • substring(開始添字, 終了添字):二つの指定インデックス間の文字を取り出します(先頭を含み、末尾を含みません)。

JavaScript カスタムオブジェクト

  • 定義
javascript
var オブジェクト名 = {
    属性名1: 属性値1,
   ...
    属性名n: 属性値n,
    関数名: function(仮引数リスト) {}
};
var person = {
    name: "Alice",
    age: 25,
    sayHello: function () {
        console.log("Hello!");
    }
};
  • 呼び出し:
    • オブジェクト名.属性名; で属性にアクセスします。
    • オブジェクト名.関数名(); で関数を呼び出します。

JSON

  • 概念:JSON は JavaScript オブジェクト表記法で書かれたテキストです。すべての key はダブルクォートで囲む必要があります。
  • 定義例var 変数名 = '{"key1": value1, "key2": value2}';(配列は角括弧に入れる必要があります)。例:var user = '{"name": "Bob", "age": 30}';
  • JSON 文字列から JS オブジェクトへJSON.parse() メソッドを使います。例:
javascript
var userStr = '{"name": "Bob", "age": 30}';
var jsObject = JSON.parse(userStr);
console.log(jsObject.name);
  • JS オブジェクトから JSON 文字列へJSON.stringify() メソッドを使います。例:
javascript
var person = {name: "Charlie", age: 35};
var jsonStr = JSON.stringify(person);
console.log(jsonStr);

BOM(ブラウザオブジェクトモデル)

  • 概念:ブラウザオブジェクトモデルです。JavaScript がブラウザと対話できるように、ブラウザの各部分をオブジェクトとして扱います。
  • Window ブラウザウィンドウオブジェクト(window. は省略できます):
    • 属性:
      • historyHistory オブジェクトへの読み取り専用参照です。
      • location:ウィンドウまたはフレームの Location オブジェクトです。
      • navigatorNavigator オブジェクトへの読み取り専用参照です。
    • メソッド:
      • alert():メッセージと確認ボタンを持つ警告ボックスを表示します。
      • confirm():メッセージ、確認ボタン、キャンセルボタンを持つダイアログを表示し、boolean 値を返します。例:var result = confirm("操作を確認しますか?"); console.log(result);。ユーザーが押したボタンにより true または false を返します。
      • setInterval():指定した周期(ミリ秒)で関数または式を呼び出します。例:setInterval(() => { console.log("1000ミリ秒ごとに実行"); }, 1000);
      • setTimeout():指定したミリ秒後に関数または式を呼び出します。例:setTimeout(() => { console.log("3000ミリ秒後に実行"); }, 3000);
  • location オブジェクト(呼び出し方法:window.location.属性):
    • 属性:
      • href:完全な URL を設定または返します。例:window.location.href = "https://www.example.com"; は指定サイトへ移動します。

DOM(ドキュメントオブジェクトモデル)

  • 概念と役割:

    • HTML などのマークアップ言語の構成部分を、対応するオブジェクトとして扱います。例:Document(文書全体のオブジェクト)、Element(要素オブジェクト)、Attribute(属性オブジェクト)、Text(テキストオブジェクト)、Comment(コメントオブジェクト)など。
    • JavaScript は DOM を通じて HTML を操作できます。たとえば、要素内容の変更、CSS スタイルの変更、DOM イベントへの反応、要素の追加と削除などです。
  • 要素の取得方法:

    • id 属性値で取得:単一の Element オブジェクトを返します。例:var h1 = document.getElementById('h1');
    • タグ名で取得Element オブジェクト配列を返します。例:var divs = document.getElementsByTagName('div');
    • name 属性値で取得Element オブジェクト配列を返します。例:var hobbys = document.getElementsByName('hobbys');
    • class 属性値で取得Element オブジェクト配列を返します。例:var clss = document.getElementsByClassName('cls');

イベントバインディング

一、タグ内のイベント属性でバインディングする

html
<input type="button" onclick="on()" value="ボタン1">
<script>
    function on() {
        alert("クリックされました");
    }
</script>

この方法では、HTML タグ内でイベント属性(ここでは onclick)を直接使い、その要素がクリックされた時に実行する JavaScript 関数を指定します。ページ読み込み後、ブラウザは <input> タグ内の onclick="on()" を解析し、このボタンをクリックすると on 関数を呼び出すと判断します。ボタンがクリックされると、ブラウザは on 関数を実行し、「クリックされました」という警告ボックスを表示します。

二、DOM 要素属性でバインディングする

html
<input type="button" id="btn" value="ボタン2">
<script>
    document.getElementById('btn').onclick = function () {
        alert('クリックされました!');
    }
</script>

ここでは、まず document.getElementById('btn')id="btn" を持つ <input> ボタン要素を取得します。その後、匿名関数をその要素の onclick 属性に代入します。これにより、ボタンがクリックされた時に匿名関数が実行され、「クリックされました!」という警告ボックスが表示されます。この方法は、JavaScript コードで対応する DOM 要素を取得してから、動的にイベント処理関数をバインドします。HTML コードと JavaScript コードをある程度分離できます。

Released under the MIT License.