JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで独自のtoLowerCase()関数を実装する方法

JavaScriptでは、標準のtoLowerCase()メソッドとまったく同じ機能を持つ文字列関数を自作し、既存のメソッドを上書き(オーバーライド)することができます。

この記事では、ASCIIコードを活用して大文字を小文字に変換する、独自のtoLowerCase()関数の実装方法をわかりやすく解説します。

変換の仕組み

アルファベットの大文字「A〜Z」はASCIIコードで65〜90に対応しており、小文字「a〜z」は97〜122に対応しています。つまり、大文字と小文字のコード値には32の差があります。このため、大文字のASCIIコードに32を加算すれば、対応する小文字に変換できるというわけです。

この性質を利用して、文字列を1文字ずつ走査しながら、大文字(65〜90)であればコード値に32を加えて小文字へ変換し、それ以外の文字はそのまま連結していきます。

実装例

const str = 'Some UpPerCAsE LeTTeRs!!!';

const toLowerCase = function(){
  let str = '';
  for(let i = 0; i < this.length; i++){
    const ascii = this[i].charCodeAt();
    if(ascii >= 65 && ascii <= 90){
      str += String.fromCharCode(ascii + 32);
    }else{
      str += this[i];
    }
  }
  return str;
};

String.prototype.toLowerCase = toLowerCase;
console.log(str.toLowerCase());

コードのポイント

  • this[i].charCodeAt():各文字のASCIIコード値を取得します。
  • ascii >= 65 && ascii <= 90:その文字が大文字のA〜Zであるかどうかを判定します。
  • String.fromCharCode(ascii + 32):コード値に32を加算し、対応する小文字に変換します。
  • String.prototype.toLowerCase = toLowerCase;:作成した関数をStringのプロトタイプに代入することで、すべての文字列インスタンスから呼び出せるようになります。

実行結果

コンソールには以下のように出力されます。

some uppercase letters!!!

注意点

この実装は、ASCII範囲内の英字(A〜Z)のみを対象としたシンプルなものです。そのため、「É」のようなアクセント付き文字や、非ラテン文字の大文字・小文字は正しく変換されません。実際の開発では、Unicodeへの対応が必要なケースも多いため、本番環境では標準のtoLowerCase()を使うのが安全です。また、組み込みメソッドの上書きは他のコードに予期しない影響を与える可能性があるため、このような実装はあくまで学習目的にとどめることをおすすめします。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説

    JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン