トップページに戻る

Javascript文法

HTMLへの読み込み

  1. HTML内でのJavascriptファイル script.js の読み込み:
      <script src="script.js"></script> (<head>でも<body>でもよい)
    script.jsで定義されている変数や関数にアクセスできる
  2. HTML内での Javascript の記述:
    <script>
      // ここに Javascript文
    </script>

文の単位

コメント文

予約語

await, break, case, catch, class, const, continue, debugger, default, delete, do, else, enum, export, extends, false, finally, for, function, if, import, implements, in, instanceof, interface, let, new, null, package, private, protected, public, return, static, super, switch, this, throw, true, try, typeof, var, void, while, with, yield

変数の型

型のチェック: typeof
> 例: if (typeof myVar === "string") { }

配列かどうかのチェック: 
 例: Array.isArray(myVar)
 例: myVar instanceof Array

オブジェクト

ブロック

変数宣言

配列

配列の代入

let x = 5, y = 10;
[x, y] = [y, x]; // x と y を交換

スライス
const numbers = [10, 20, 30, 40, 50];
const sliced = numbers.slice(1, 3);  // 1から2までの要素を配列として取得。負のインデックスは最後から数える

ネストされた配列の代入
const matrix = [[1, 2], [3, 4]];
const [[a, b], [c, d]] = matrix

分割代入

const numbers = [10, 20, 30];
const [a, b, c] = numbers;

const numbers = [10, 20, 30, 40];
// 1つ目と3つ目の要素を取得(2つ目はスキップ)
const [first, , third] = numbers;

const numbers = [10, 20, 30, 40, 50];
// 最初の要素を `first` に、残りを `rest` に
const [first, ...rest] = numbers;
// 最後の要素を `last` に、残りを `rest` に
const numbersReversed = [...numbers].reverse();
const [last, ...restReversed] = numbersReversed;

オブジェクトの代入

オブジェクトの場合、分割代入 (デストラクチャリング)が使えます。

const user = { name: "Alice", age: 25, country: "Japan" };
const { name, age, country } = user;

プロパティ名の変更

/ `name` を `userName` という変数名に変更
const { name: userName, age: userAge } = user;

デフォルト値の変更

// `age` は存在しないのでデフォルト値 `20` が適用される
const { name, age = 20, country = "Unknown" } = user;

ネストされたオブジェクトの分割代入

const person = {
  name: "David",
  address: {
    city: "Tokyo",
    zip: "100-0001"
  }
};
// ネストされたオブジェクトを分割代入
const { name, address: { city, zip } } = person;

スプレッド構文 (...)

const user = { name: "George", age: 28, country: "USA", job: "Engineer" };

// `name` と `age` を取得し、残りを `rest` にまとめる
const { name, age, ...rest } = user;

関数宣言

function func_name(引数) {
}

アロー関数
const greet = (message) => {
  console.log(message);
};

const multiply = (a, b) => a * b;

const square = n => n * n; // 引数が1つの場合は () を省略できる

デフォルト引数:

 引数に undefined が渡された場合に、デフォルト引数が使われます (未定義値を渡したい場合は null を渡すこと)。
pythonと異なり、先に出てきた引数をデフォルト引数として使うことができます。

function func_name(var1,var2 = "abc", var3 = `${var2}_def` {
}

キーワード引数:

 Jaascriptではキーワード引数は使えません。オブジェクトを使うことで類似のことが実現できます。
オブジェクトの分割代入を使うと便利です。

function configureSettings(options = {}) {
  const { theme = "light", fontSize = 16, language = "en" } = options;
  console.log(`Theme: ${theme}, Font Size: ${fontSize}, Language: ${language}`);
}

function printUser({ name, age = 18 }) {
  console.log(`Name: ${name}, Age: ${age}`);
}
const user = { name: "Emma", age: 22 };
printUser(user); // "Name: Emma, Age: 22"

スプレッド構文の利用

function printDetails({ name, ...details }) {
  console.log(`Name: ${name}`);
  console.log("Other details:", details);
}
printDetails({ name: "Charlie", age: 28, city: "Tokyo" });

即時実行関数

関数定義を () でくくると、即時実行される

(function() {
  console.log("この関数は即時に実行されます!");
})();

(() => {
console.log("This function runs immediately!");
})();

数学関数

  • Math.random(), Math.abs(), Math.PI, Math.sin()など
  • 行列計算:
    const XT = math.transpose(X);
    const XTX = math.multiply(XT, X);
    const invXTX = math.inv(XTX);

基本構文

  • 条件分岐:
    if (n < 10) {
      ...;
    } else {
      ...;
    }
  • 条件分岐:
    switch (n) {
      case 1:
        ...;
        break;
      case 2:
        ...;
        break;
      default:
        ...;
        break;
    }
  • 繰り返し:
    while (n < 10) {
      ...;
      n++;
    }
  • 繰り返し:
    do {
      ...;
      n++;
    } while (n < 10);
  • 繰り返し:
    for (i = 0 ; i < 10 ; i++) {
      ...;
    }
     
    const array = [1, 2, 3];
    for (let index in array) {
      print(array[index]);
    }
    for (let value of array) {
      print(value);
    }
    array.forEach(value, index) => {
      print(`index: ${index}, value: ${value}");
    }
    for (let [index, value] of array.entries()) {
      print(`index: ${index}, value: ${value}");
    }
  • ループ処理:
    break;
    for (let i = 0 ; i < 10 ; i++) {
      if (i == 5) {
         break;
      }
    }
    break label;
    start:
    for (let i = 0 ; i < 10 ; i++) {
      if (i == 5) {
         break start;
      }
    }
    continue;
    continue label;
  • ジャンプ:
    goto label

オブジェクト参照

  • withを使うとオブジェクト名を省略できる
    with (doc) {
      print(color);
    }

    print(doc.color);
    に等しい

例外処理

  • try {
      ...;
      if (error) {
        throw "myException";
      }
    } catch (e) {  
    // catchの変数 (e) は省略できる
      ..;
    } finally {
      ...;
    }

モジュール

  • モジュール内でexportする関数や変数の宣言
    export function func_name() { }
    export let var_name = 5;
    export func_name, var_name;
    export * as mod from "./module.js";
     
  • 読み込み側ではimportを使う:
    import "./module.js";
    import { func_name } from "./module.js";
    import { func_name1 as f1, func_name2 as f2 } from "./module.js";
    import * as mod from "./module.js";
     
  • HTMLからの読み込み:
    <script type="module" src="module.js"></script>
  • モジュールのメタ情報:
    import.meta

デバッグ支援

  • console.log()で開発者ツールのコンソールに出力
  • debugger;
    を入れて、開発者ツールを開いて実行すると、ここで実行が止まってデバッグモードに入る

算術演算子:

  • 四則演算: +, -, *, /
  • 剰余: %
  • べき乗 **
  • インクリメント: ++myVar, myVar++
  • デクリメント: --myVar, myVar--

比較演算子:

  • 値の比較: ==, !=, <, <=, >, >=
  • 厳密な一致比較 (値と型の両方): ===, !==   
      myVar == undefined: 変数 var がundefinedあるいはnullの場合は true。varが未定義変数の場合はエラーになる
      myVar === undefined: 変数 var がundefinedの場合はtrue。varが未定義変数の場合はエラーになる
      typeof myVar == "undefined": 変数 var が未定義あるいは未定義値 (undefined) かどうかの場合は true。

論理演算子・ビット演算子:

  • 論理演算: &&, ||, !, ~var_name
  • 論理代入演算子:
    ||=, &&=, ??=
  • ビット演算: &、|、^、~、<<、>>、>>> (左端には0が埋められる)

複合演算子

  • 複合代入演算子:
    +=、‐=、*=、・=、%=, **=, &=, !=, ^=, <<=, >>=, >>>=
  • 条件演算子 (3項演算子):
    exp1 ? exp2 : exp3
  • ヌル関連演算子:
    var2 = var1 ?? exp;  // var1がnullやundefinedの場合にexpを、それ以外の場合はvar1を返す
  •  

その他演算子

  • typeof expression
  • delete var_name;
    void function func() { }  // 戻り値がundefined;
      何も実行しないときに void(0) と書くjことがある
  • expression in object
  • var_name instanceof object_type  // var_name が object_typeの印すっタンスかどうかを調べる

よく使う関数

  1. 開発者モードのコンソールにmessageを出力:
      console.log(message); 
     
  2. Javascriptのプログラム string を実行:
      eval(string);

文字列

  • "" あるいは '' で囲う
  • エスケープ文字が使える: \n、\f、\b、\r、\t,, \', \"など
  • `` で囲うとテンプレート文字列
    変数 var_name の値は ${var_name} で参照できる。var_name は javascript文でもよい

複数行

  • 行末に \ を書く
  • `` で行末\ 無しで改行した場合、改行コードが挿入される

文字列関係

  • 型変換: String(value);
  • 文字列の長さ: myVar.length
  • n番目の文字の取り出し: myVar.charAt(n)
  • 部分文字列: myVar.substring(n1, n2)  // 負の値を指定すると 0 とみなされる
  • 部分文字列: myVar.slice(n1, n2)  // 負の値を指定すると文字列の後ろから数えた文字を指す
  • 部分文字列: myVar.substr(n1, len)  // 負の値を指定すると文字列の後ろから数えた文字を指す
  • 文字列の前後の空白を削除: myVar.trim()
  • 文字列の前の空白を削除: myVar.trimStart()
  • 文字列の後の空白を削除: myVar.trimEnd()
  • 文字列の分割: myVar.split(seperator, limit)
  • 文字列の連結: myVar.concat(str2, str3, ...)
  • 繰り返しの文字列: myVar.repeat(n)
  • 置換: myVar.replace(regexp, substitutionString)
  • 置換: myVar.replaceAll(regexp, substitutionString)
  • 大文字変換: myVar.toUpperCase()
  • 小文字変換: myVar.toLowerCase()
  • 最初の一致文字列の検索: myVar.indexOf(key [, from])  // 一致が見つからない場合は -1 を返す
  • 最後の一致文字列の検索: myVar.lastIndexOf(key [, from])  // 一致が見つからない場合は -1 を返す
  • 最初が str から始まっているか: myVar.startsWith(str)
  • 最後が str で終わっているか: myVar.endsWith(str)
  • strを含んでいるか: myVar.includes(str)
  • 最初にマッチする文字列を返す: myVar.match(regexp)
  • マッチする位置を返す: myVar.search(regexp)
  • n番目の文字のUTF-16における文字コードを返す: myVar.charCodeAt(n)
  • n番目の文字のUTF-16における文字コードを返す: myVar.codePointAt(n)
  • 文字コード num? で指定した文字列を返す: String.fromCharCode(num1, num2, ..., )
  • 文字列の前方にパディング: myVar.padStart(len [, str])
  • 文字列の広報にパディング: myVar.padEnd(len [, str])

HTMLタグ

JSON

Unicode

Promize

Web制御