第4回 - ESモジュール
ECMAScriptモジュール(JavaScriptモジュール)
Section titled “ECMAScriptモジュール(JavaScriptモジュール)”- モジュールとは便利な関数などをまとめたプラグインの様なもの
- モジュールは1つの
.jsファイル exportで、モジュールを外部に出力importで、モジュールを取り込んで使用
default エクスポート/インポート
Section titled “default エクスポート/インポート”1つの.jsファイル(モジュール)の基礎となる機能を設定する
- index.html
ディレクトリjs
- sayHello.js モジュールとなるファイル
- main.js
ディレクトリcss/
- …
-
sayHello.jsにモジュールを作成sayHello.js // exportで設定された関数や変数などだけが他のJSファイルから参照できる。export default (name) => {console.log(`こんにちは!${name}さん`);}; -
作成したモジュールを
main.jsで取り込むmain.js // helloという任意の名前でモジュールを取り込むimport hello from "./sayHello.js";// 任意の名前をつけたモジュールを使用するhello("田中"); // こんにちは!田中さん -
main.jsをindex.htmlで読み込むindex.html <script src="js/main.js" type="module"></script>
名前付き エクスポート/インポート
Section titled “名前付き エクスポート/インポート”モジュール内の機能に名前をつけて必要な機能だけをインポートする
- index.html
ディレクトリjs
- utilities.js いくつかの機能をまとめたモジュール
- main.js
ディレクトリcss/
- …
-
utilities.jsに名前付きモジュールを作成utilities.js const sayHello = (name) => {console.log(`こんにちは!${name}さん`);};const sayBye = (name) => {console.log(`さようなら!${name}さん`);};// sayHelloとsayByeを名前付きモジュールとして出力export { sayHello, sayBye }; -
作成したモジュールを
main.jsで取り込むmain.js // utilities.jsで出力したものと同じ名前で取り込むimport { sayHello, sayBye } from "./utilities.js";// sayHelloの機能だけ必要な場合// import { sayHello } from "./utilities.js"sayHello("田中"); // こんにちは!田中さんsayBye("渡辺"); // さようなら!渡辺さん -
main.jsをindex.htmlで読み込むindex.html <script src="js/main.js" type="module"></script>
オブジェクト
Section titled “オブジェクト”オブジェクトとは、関連するデータや、関数をまとめておく場所で、設定値や関連する機能をまとめておくために使用される。
const obj = { // キー: 値 key: "value", // この1行のかたまりをプロパティと呼ぶ key2: 10, // 複数のプロパティを指定する時は,(カンマ)で区切る key3: true,};また、プロパティの値には関数やオブジェクトを入れ子にすることも可能で、オブジェクトに紐づいた関数のことをメソッドと呼ぶ。
const user = { name: "田中", age: 25, message: function () { // メソッド console.log("こんにちは"); }, address: { // userオブジェクトの中にaddressオブジェクトを入れることも可能 country: "Japan", city: "Tokyo", },};プロパティの参照・追加
Section titled “プロパティの参照・追加”プロパティの値を参照したり追加・変更をするにはドット(.)を使用して、下記のように記述します。
プロパティアクセサー - JavaScript | MDN ↗
const user = { name: "田中", age: 25, message: function () { console.log("こんにちは"); }, address: { country: "Japan", city: "Tokyo", },};
// .(ドット)を使用してプロパティを参照するconsole.log(user.name); // 田中console.log(user.message()); // こんにちはconsole.log(user.address.city); // Tokyo
// プロパティを上書きするuser.name = "山田";console.log(user.name); // 田中から山田に上書きされる
// 新しくemailというプロパティを追加user.email = "tanaka@example.com";複数のオブジェクトを合体させる方法
Section titled “複数のオブジェクトを合体させる方法”スプレッド構文(...)を使用して複数のオブジェクトを合体することが出来る。
const secret = { id: 12345, password: "password" };const profile = { name: "田中", age: 25 };
// secretオブジェクトとprofileオブジェクトの合体const user = { ...secret, ...profile };/*user = { id: 12345, password: "password", name: "田中", age: 25,};*/また、スプレッド構文を使用してオブジェクトを合体させると、プロパティの上書きが可能。
const defaultSettings = { theme: "light", fontSize: 14, language: "ja" };const userSettings = { fontSize: 16, language: "en" };
// 合体時にプロパティを上書きする(後のオブジェクトが優先される)const settings = { ...defaultSettings, ...userSettings };/*settings = { theme: "light", fontSize: 16, // userSettingsの値が上書き language: "en", // userSettingsの値が上書き}*/オブジェクトを分解する方法
Section titled “オブジェクトを分解する方法”残余プロパティ(...)を使用してオブジェクトを分解することが出来る。
オブジェクトから特定のプロパティを除外したい場合などに便利。
const user = { id: 12345, password: "password", token: "xyz123", name: "田中", age: 25,};
// password変数、token変数、profileオブジェクトに分解const { password, token, ...profile } = user;/*profile = { id: 12345, name: "田中", age: 25,}*/関数の戻り値(返り値)
Section titled “関数の戻り値(返り値)”関数は実行結果として関数の実行時にreturnを使用して、なんらかの値を戻すことが出来る。
// 引数a, bを合計して計算結果を戻すadd関数を定義const add = function (a, b) { return a + b; // 計算結果を返す};
// add関数の実行時に計算結果が返ってくるconsole.log(add(5, 3)); // 8早期リターン(Early Return)
Section titled “早期リターン(Early Return)”returnの特徴としてreturnと;もしくはreturnと改行が出てきた時点で処理が終了するというものがある。
例外的な条件をあらかじめ弾いておいて、return以降の処理が実行されないようにしたい場合にこの特性が利用され、この処理に関係の無いケースを予め除外しておくパターンのことを早期リターン(Early Return)と言う。
この場合、明示的に返したいものがない場合はreturn;のみで終了させることも可能
const sendFormData = (formData) => { // formDataにメールアドレスが存在しているかどうかを先にチェックする if (!formData.email) { console.error("メールアドレスが存在しません。"); return; }
// この行以降に色々な処理が続く};
const onlyMobile = (width) => { // 画面幅(width)が440px以上だった場合は処理を止める if (width >= 440) { console.error("この関数はモバイル専用の関数です"); return; }};