ビルトインオブジェクトの最後は、Globalオブジェクトです。globalという単語には「地球全体の」とか「包括的な」という意味があります。地球全体はさておき、何が包括的なのかということになりますが、Globalオブジェクトには「よく使われる」変数(プロパティ)や関数(メソッド)が定義されていて、これらの機能は「プログラムのどこからでも使える」ようになっています。このように、制限がなくどこからでも利用できるのがGlobalオブジェクトの特徴です。
さて、プログラム全体で見た場合、変数やメソッドは、何らかのオブジェクトに含まれていることが常ですが、Globalオブジェクトは内部的に生成されるオブジェクトなので、次のようにソースコード上でインスタンスを生成することはできません。
「すでに生成済みなので、インスタンス化の必要はないわけですね。じゃあ、静的メソッドを実行するときみたいに、オブジェクト名を指定すればいいんじゃないですか?」
「Globalオブジェクトに属するメソッドを静的メソッドのように呼び出せるかというと、これもできません。このように書かなくても、Globalオブジェクトのメソッド名をそのまま書けばよいのです」
「コードを書くときの『何を.どうする』が使えじゃないですか」
「要は、実行もとのオブジェクトを必要としないんです。JavaScriptの最上位の部分でGlobalオブジェクトのプロパティやメソッドが定義されているので、これまでのように『インスタンスの参照変数名.メソッド名():』や、Math()オブジェクトの静的メソッドのように『オブジェクト名.メソッド名();』のように書く必要はなく、いきなり『メソッド名()』と書いて呼び出せるのです」
「Globalオブジェクトで定義されているプロパティやメソッドは、『プログラムのどこからでも利用できる』ので、グローバルプロパティとかグローバルメソッドといった呼び方をされます」
| 定数名 | 説明 | |
|---|---|---|
| Infinity | 無限大を表す数値。 | |
| NaN | 数値ではない(Not-A-Number)ことを表す値。 | |
| undefined | 未定義である事を意味する値。 | |
| 関数名 | 説明 | |
|---|---|---|
| isFinite(num) | numが有限値かどうか(NaNや正負の無限大でない)であるかを判定します。 | |
| isNaN(num) | numが数値ではない(Not-A-Number)かどうかを判定します。 | |
| 関数名 | 説明 | |
|---|---|---|
| Boolean(val) | valを真偽値型に変換します。 | |
| Number(val) | valを数値型に変換します。 | |
| String(val) | valを文字列型に変換します。 | |
| parseFloat(str) | 文字列strを浮動小数点数に変換します。 | |
| parseInt(str) | 文字列strを整数値に変換します。 | |
| ※Boolean()、Number()、String()は、グローバルコンストラクターと同じものです。 | ||
| 関数名 | 説明 | |
|---|---|---|
| escape(str) | 文字列をエスケープ処理する。 | |
| unescape(str) | エスケープ処理された文字列をもとに戻す。 | |
| encodeURI(str) | 文字列をURIエンコードする。半角英数字以外の文字(特殊文字を除く)がUTF-8エスケープシーケンス(%と16進数2桁の値)に置き換えられる。 | |
| decodeURI(str) | URI内のエンコードされたエスケープシーケンスをもとの文字に置き換える。 | |
| encodeURIComponent(str) | 文字列をエスケープ処理する。半角英数字以外の文字(特殊文字を除く)がUTF-8エスケープシーケンス(%と16進数2桁の値)に置き換えられる。「;」などの特殊文字もエンコードされる。 | |
| decodeURIComponent(str) | URI内のエンコードされたエスケープシーケンスを、特殊文字も含めてもとの文字に置き換える。 | |
| 関数名 | 説明 | |
|---|---|---|
| eval(str) | 文字列strをJavaScriptのコードに変換して実行する。 | |
「コンストラクターは、オブジェクトのインスタンスを生成するための関数です。これまでに見てきたStringなどのラッパーオブジェクト、さらにはObjectオブジェクトのインスタンスを生成するコンストラクターは、すべてGlobalオブジェクトのコンストラクターです」
| コンストラクター名 | 説明 | |
|---|---|---|
| Array() | Arrayオブジェクトのインスタンスを生成する。 | |
| Boolean() | Booleanオブジェクトのインスタンスを生成する。 | |
| Date() | Dateオブジェクトのインスタンスを生成する。 | |
| Function() | Functionオブジェクトのインスタンスを生成する。 | |
| Number() | Numberオブジェクトのインスタンスを生成する。 | |
| Object() | Objectオブジェクトのインスタンスを生成する。 | |
| RegExp() | RegExpオブジェクトのインスタンスを生成する。 | |
| String() | Stringオブジェクトのインスタンスを生成する。 | |
これまでに関数という用語がよく出てきました。折に触れ何度かお話したことがありますが、関数とは、特定の処理を行うコードをまとめておき、これに名前を付けたものです。関数名を書くことで呼び出すことができ、呼び出す際に何らかの値を渡すと関数内のコードブロックで処理を行い、結果が返されてきます。このようなことからよく使う決まりきった処理は関数として定義しておけば、いつでも関数を呼び出して処理を行わせることができるというわけです。
では、いったいメソッドとどこが違うのかというと、実はメソッドの実体は関数なのです。
そもそもJavaScriptでは関数もオブジェクトとして扱われます。で、関数には名前を付けますので、関数名というのはオブジェクトを参照するためのプロパティということになります。JavaScriptでは『プロパティで参照される関数』のことをメソッドと呼びます。ということは、結局のところ『JavaScriptの関数はすべてメソッドである』と見なすことができるんですね。
メソッドは「オブジェクト名.メソッド名()」のように書いて呼び出しますが、メソッド名を指定することで呼び出されるのは、メソッドとして登録されている関数ということなのです。
JavaScriptプログラミングをdocument.writeやalertで始める際の基礎知識をパーフェクトに解説する
JavaScriptを中心としたWebアプリ開発の栄枯盛衰まとめ――LiveScriptからAngularJS/React.jsまで
ようこそJavaScriptの世界へCopyright © ITmedia, Inc. All Rights Reserved.