JavaScriptの'z'['toUpperCase']()はどのように、そしてなぜ機能するのか?
JavaScriptの'z'['toUpperCase']()はどのように機能するのか
JavaScriptのtoUpperCase()メソッドは、文字列を大文字に変換するためのメソッドです。通常はドット記法を使って次のように書きます。
'z'.toUpperCase(); // "Z" を返す
しかし、実はブラケット記法(角括弧記法)を使っても同じ結果が得られます。
'z'['toUpperCase']; // メソッドそのものを参照
さらに、末尾に () を付けて呼び出せば、実際に大文字への変換が実行されます。
'z'['toUpperCase'](); // "Z" を返す
これは、次のコードと同じ意味になります。
alert('z'.toUpperCase());
なぜプリミティブ値でメソッドが使えるのか
ここで注目すべきは、「'z'」がオブジェクトではなくプリミティブ値(文字列型の基本値)であるという点です。本来、プリミティブ値にはプロパティやメソッドが存在しません。
ところが、JavaScriptではプリミティブな文字列に対してプロパティやメソッドへアクセスしようとすると、エンジンが内部で一時的にラッパーオブジェクト(Stringオブジェクト)を自動生成します。このオブジェクトがtoUpperCaseなどのメソッドを持っているため、プリミティブ値に直接メソッドがあるかのように動作するのです。
内部的にはおおよそ次のような流れで処理されています。
// 概念的にはこのように動作している
const temp = new String('z');
temp.toUpperCase(); // "Z"
// 処理後、一時的なオブジェクトは破棄される
ドット記法とブラケット記法の違い
'z'.toUpperCase()と'z'['toUpperCase']()は、どちらも同じメソッドを呼び出しています。違いはプロパティ名の指定方法だけです。
- ドット記法:シンプルで可読性が高く、通常はこちらが推奨されます。
- ブラケット記法:プロパティ名を変数や式で動的に指定したい場合に有効です。
const methodName = 'toUpperCase'; 'z'[methodName](); // "Z"
まとめ
'z'['toUpperCase']()が機能するのは、JavaScriptがプリミティブ値に対して一時的なStringラッパーオブジェクトを自動的に生成するためです。ブラケット記法は動的なメソッド呼び出しに便利ですが、通常のコードでは可読性の高いドット記法を使用するのがよいでしょう。
-
Windows Helloとは?仕組みと設定・有効化方法を徹底解説
パスワードを入力せずに、安全かつスピーディーにPCへログインできたら便利だと思いませんか?「Windows Hello」はそんな悩みを解決する、Microsoftの生体認証ログイン技術です。顔・虹彩・指紋を使った認証により、従来のキーボード入力よりも速く、安全で、簡単なログインを実現します。 この記事では、Windows Helloの仕組みと、使い始めるための具体的な設定方法をわかりやすく解説します。 Windows Helloとは?何ができるの? 10年前、生体認証によるログインはSF映画やテクノスリラーの中だけの話でした。しかし今日では、顔や虹彩、指紋だけでWindows PCにログインす
-
分散型VPN(dVPN)とは?仕組みと通常のVPNとの違いを徹底解説
VPNとは、あなたのコンピューターとVPNプロバイダーのサーバー間に張られる安全な接続のことです。インターネット接続にもう一段階の保護を加え、プライバシーとセキュリティの面で多くのメリットをもたらしてくれます。 では、通常のVPNがこれだけの機能を持つなら、分散型VPN(dVPN)は何が違うのでしょうか? 本記事では、分散型VPNの仕組み、通常のVPNとの比較、そして分散型VPNが自分に合っているかどうかについて詳しく解説します。 VPNの仕組み 分散型VPNの話に入る前に、まず通常のVPNがどのように機能するのかを確認しておきましょう。 通常のVPNは、インターネット上の2つの地点間に安全な