JavaScriptの秘宝を探せ!隠れた機能を使いこなしてコードをレベルアップ

2024-04-06

JavaScriptの隠れた機能

デストラクタは、オブジェクトが破棄される時に自動的に呼び出される関数です。 オブジェクトが不要になった時に、リソースを解放したり、クリーンアップ処理を行うのに役立ちます。

例:

class Person {
  constructor(name) {
    this.name = name;
  }

  destructor() {
    console.log(`Goodbye, ${this.name}!`);
  }
}

const person = new Person("John Doe");

// person オブジェクトが破棄されると、デストラクタが呼び出される
person = null;

スプレッド構文は、イテレータブルオブジェクト(配列や文字列など)を展開して、個々の要素を関数引数や配列要素として渡すのに役立ちます。

const numbers = [1, 2, 3];

// スプレッド構文を使って、`Math.max()` 関数に個々の要素を渡す
const max = Math.max(...numbers);

console.log(max); // 3

const fruits = ["apple", "banana", "orange"];

// スプレッド構文を使って、`fruits` 配列を `allFruits` 配列に結合する
const allFruits = [...fruits, "mango"];

console.log(allFruits); // ["apple", "banana", "orange", "mango"]

テンプレートリテラルは、複数の文字列を結合して、複雑な文字列を簡単に作成するのに役立ちます。

const name = "John Doe";
const age = 30;

// テンプレートリテラルを使って、挨拶文を作成する
const greeting = `Hello, ${name}! You are ${age} years old.`;

console.log(greeting); // Hello, John Doe! You are 30 years old.

オプションチェーン演算子は、プロパティやメソッドが存在しない場合でも、エラーを発生させずに値を取得するのに役立ちます。

const user = {
  name: "John Doe",
  address: {
    city: "New York",
  },
};

// オプションチェーン演算子を使って、`user.address.country` の値を取得する
const country = user?.address?.country;

console.log(country); // undefined

// 従来の書き方
const country2 = user.address && user.address.country;

console.log(country2); // undefined

Promise.allSettled は、すべてのプロミスが解決されるのを待ってから、結果(成功または失敗)をまとめて取得するのに役立ちます。

const promises = [
  fetch("https://api.example.com/1"),
  fetch("https://api.example.com/2"),
  fetch("https://api.example.com/3"),
];

// Promise.allSettled を使って、すべての API リクエストの結果を取得する
Promise.allSettled(promises).then((results) => {
  for (const result of results) {
    if (result.status === "fulfilled") {
      console.log(result.value); // 成功時の結果
    } else {
      console.log(result.reason); // 失敗時の理由
    }
  }
});

これらの機能は、JavaScript の開発効率を向上させるのに役立ちます。 ぜひこれらの機能を活用して、より洗練されたコードを書きましょう。




デストラクタ

class Person {
  constructor(name) {
    this.name = name;
  }

  destructor() {
    console.log(`Goodbye, ${this.name}!`);
  }
}

const person = new Person("John Doe");

// person オブジェクトが破棄されると、デストラクタが呼び出される
person = null;

スプレッド構文

const numbers = [1, 2, 3];

// スプレッド構文を使って、`Math.max()` 関数に個々の要素を渡す
const max = Math.max(...numbers);

console.log(max); // 3

const fruits = ["apple", "banana", "orange"];

// スプレッド構文を使って、`fruits` 配列を `allFruits` 配列に結合する
const allFruits = [...fruits, "mango"];

console.log(allFruits); // ["apple", "banana", "orange", "mango"]

テンプレートリテラル

const name = "John Doe";
const age = 30;

// テンプレートリテラルを使って、挨拶文を作成する
const greeting = `Hello, ${name}! You are ${age} years old.`;

console.log(greeting); // Hello, John Doe! You are 30 years old.

オプションチェーン演算子

const user = {
  name: "John Doe",
  address: {
    city: "New York",
  },
};

// オプションチェーン演算子を使って、`user.address.country` の値を取得する
const country = user?.address?.country;

console.log(country); // undefined

// 従来の書き方
const country2 = user.address && user.address.country;

console.log(country2); // undefined

Promise.allSettled

const promises = [
  fetch("https://api.example.com/1"),
  fetch("https://api.example.com/2"),
  fetch("https://api.example.com/3"),
];

// Promise.allSettled を使って、すべての API リクエストの結果を取得する
Promise.allSettled(promises).then((results) => {
  for (const result of results) {
    if (result.status === "fulfilled") {
      console.log(result.value); // 成功時の結果
    } else {
      console.log(result.reason); // 失敗時の理由
    }
  }
});



JavaScriptの隠れた機能を活用する他の方法

デフォルト引数を使うことで、関数の引数を省略することができます。

function greet(name = "John Doe") {
  console.log(`Hello, ${name}!`);
}

greet(); // "Hello, John Doe!" と出力される
greet("Jane Doe"); // "Hello, Jane Doe!" と出力される

アロー関数を使うことで、簡潔なコードを書くことができます。

const numbers = [1, 2, 3];

// 通常の関数
const doubledNumbers = numbers.map(function(number) {
  return number * 2;
});

// アロー関数
const doubledNumbers2 = numbers.map(number => number * 2);

console.log(doubledNumbers); // [2, 4, 6]
console.log(doubledNumbers2); // [2, 4, 6]
const numbers = [1, 2, 3];

// スプレッド構文を使って、`Math.max()` 関数に個々の要素を渡す
const max = Math.max(...numbers);

console.log(max); // 3

const fruits = ["apple", "banana", "orange"];

// スプレッド構文を使って、`fruits` 配列を `allFruits` 配列に結合する
const allFruits = [...fruits, "mango"];

console.log(allFruits); // ["apple", "banana", "orange", "mango"]
const name = "John Doe";
const age = 30;

// テンプレートリテラルを使って、挨拶文を作成する
const greeting = `Hello, ${name}! You are ${age} years old.`;

console.log(greeting); // Hello, John Doe! You are 30 years old.
const user = {
  name: "John Doe",
  address: {
    city: "New York",
  },
};

// オプションチェーン演算子を使って、`user.address.country` の値を取得する
const country = user?.address?.country;

console.log(country); // undefined

// 従来の書き方
const country2 = user.address && user.address.country;

console.log(country2); // undefined
const promises = [
  fetch("https://api.example.com/1"),
  fetch("https://api.example.com/2"),
  fetch("https://api.example.com/3"),
];

// Promise.allSettled を使って、すべての API リクエストの結果を取得する
Promise.allSettled(promises).then((results) => {
  for (const result of results) {
    if (result.status === "fulfilled") {
      console.log(result.value); // 成功時の結果
    } else {
      console.log(result.reason); // 失敗時の理由
    }
  }
});
  • JavaScript のオプションチェーン

javascript hidden-features


JavaScriptモジュールやasync属性、defer属性の使い方

<head>タグ内<body>タグ内それぞれの配置方法には、メリットとデメリットがあります。ページ全体に影響を与えるJavaScriptコードを記述するのに適している。ページロード時にJavaScriptコードが実行されるため、ユーザーがページコンテンツを閲覧する前に必要な処理を実行できる。...


Reactで「label」要素と「input」要素を正しく関連付ける!「for」属性以外にも使える方法とは

React-js では、label 要素の for 属性が意図したように動作しない場合があります。これは、React-js が独自のラベル管理システムを使用しているためです。原因React-js では、label 要素と input 要素間の関連付けを id 属性ではなく、name 属性を使用して行います。そのため、for 属性で指定した id と input 要素の name が一致しない場合、label 要素と input 要素が関連付けられず、クリックしてもフォーカスが移動しません。...


【Reactチュートリアル】親コンポーネントから子コンポーネントの状態を変更

最も一般的な方法は、親コンポーネントから子コンポーネントに props を渡して、子コンポーネント内で状態更新用の関数を実行できるようにすることです。親コンポーネントこの例では、親コンポーネントは count という状態と、incrementCount という関数を持つ ChildComponent に props として渡されます。ChildComponent は count を表示し、incrementCount をクリックすると親コンポーネントの count 状態を更新するボタンを持っています。...


React アプリ開発の悩みを解決!React Router v4 での「Cannot GET url」エラーの全貌

React Router v4 で "Cannot GET url" エラーが発生する場合は、通常、クライアント側ルーティングとサーバー側ルーティングの不整合が原因です。このエラーは、ブラウザが URL をリロードまたは直接入力した場合に発生する可能性があります。...


Reactで状態管理をレベルアップ: useStateフックとコールバック

そこで、この解説では、useStateフックとコールバックを組み合わせることで、より柔軟な状態管理を実現する方法について、以下の3つの方法を中心に詳しく説明します。setStateの第2引数としてコールバックを渡すuseStateフックのsetState関数には、状態更新後の処理を実行するためのコールバック関数を第2引数として渡すことができます。この方法は、状態更新に伴う処理を簡潔に記述したい場合に有効です。...


SQL SQL SQL SQL Amazon で見る



オブジェクトプロパティへのアクセス方法:withステートメント以外にもっと良い方法がある

上記の例では、with ステートメントを使用することで、person. name や person. age といったプロパティにアクセスする際に、person というオブジェクト名を省略することができます。with ステートメントはいくつかの問題を抱えているため、一般的には使用しないことを推奨されています。


JavaScript クロージャーの仕組みを徹底解説! 3つのスコープとメモリリークへの対策

JavaScriptでは、関数内にある変数は、その関数内でしかアクセスできません。しかし、クロージャーを使用すると、関数内にある変数を、関数外からでもアクセスすることができます。これは、関数内にある変数が、関数オブジェクトの一部として保持されるためです。つまり、関数が実行された後も、その変数はメモリに残っているのです。


スッキリ理解!jQueryで要素の表示・非表示を判定する5つのテクニック

jQueryには、要素の状態を判別するための様々なメソッドが用意されています。その中でも、要素が隠れているかどうかを確認するには、以下の3つの方法が主に使用されます。:visible 擬似クラスセレクタis(':hidden') メソッドoffset().top プロパティ


Object.defineProperty() メソッドを使って JavaScript オブジェクトからプロパティを削除する方法

delete 演算子を使用する最も簡単な方法は、delete 演算子を使用することです。 構文は以下の通りです。例えば、以下のオブジェクトから name プロパティを削除するには、次のように記述します。Object. defineProperty() メソッドを使用して、プロパティの configurable 属性を false に設定することで、プロパティを削除不可にすることができます。


JavaScriptファイルに別のJavaScriptファイルを含める方法

<script>タグを使うこれは最も簡単な方法です。HTMLファイルに以下のコードを追加します。このコードは、ブラウザに別ファイル名. jsを読み込むように指示します。importステートメントを使うこれはES6で導入された新しい方法です。以下のコードのように、importステートメントを使ってファイルをインポートできます。


JavaScriptの未来を先取り!厳格モードでモダンなコードを書く

「use strict」を使用する主な理由は次のとおりです。コードの品質向上: 潜在的なバグやエラーを早期に発見しやすくなります。より安全なコード: 意図しない動作を防ぎ、セキュリティ上の脆弱性を軽減できます。将来性: 将来のバージョンのJavaScriptでは、厳格モードがデフォルトになる可能性があります。


【徹底比較】JavaScriptで部分文字列の存在を確認する3つの方法のメリットとデメリット

String. prototype. includes() メソッド概要includes() メソッドは、指定された部分文字列が文字列内に含まれているかどうかを調べ、真偽値を返します。最もシンプルで分かりやすい方法です。例メリットシンプルで分かりやすい


パフォーマンスアップ!JavaScript 配列から要素を効率的に削除する方法

splice() メソッドを使うこれは最も一般的で、柔軟な方法です。splice() メソッドは、配列の要素を追加、削除、置き換えることができます。引数 start: 削除を開始するインデックス deleteCount: 削除する要素の数


【徹底解説】JavaScriptで配列をループする方法:forEach編

forEachループは、配列の各要素に対して順番に処理を実行する関数です。ループ内で処理したい内容を記述した関数を引数として渡すことで、配列の各要素に対してその関数が実行されます。forEachループのメリット簡潔で分かりやすいコードを書ける