検索
連載

JavaScriptの「Object」「Global」オブジェクト、「NaN」「URI」エンコードの基本JavaScript標準ライブラリの使い方超入門(6)(2/4 ページ)

JavaScriptの標準仕様としてビルトインされている主なオブジェクトの使い方を紹介する連載。今回は、ビルトインオブジェクトを扱うためのObject、制限がなくどこからでも利用できるGlobalオブジェクトやコンストラクタについての基本を解説。NaNとは何かやURIエンコードのメソッドの使い方についても。

Share
Tweet
LINE
Hatena

誰でもツカエル、どこでもツカエル(Globalオブジェクト)

 ビルトインオブジェクトの最後は、Globalオブジェクトです。globalという単語には「地球全体の」とか「包括的な」という意味があります。地球全体はさておき、何が包括的なのかということになりますが、Globalオブジェクトには「よく使われる」変数(プロパティ)や関数(メソッド)が定義されていて、これらの機能は「プログラムのどこからでも使える」ようになっています。このように、制限がなくどこからでも利用できるのがGlobalオブジェクトの特徴です。

Globalオブジェクトの変数や関数はいかなるオブジェクトにも属していない

Attention

 さて、プログラム全体で見た場合、変数やメソッドは、何らかのオブジェクトに含まれていることが常ですが、Globalオブジェクトは内部的に生成されるオブジェクトなので、次のようにソースコード上でインスタンスを生成することはできません。

インスタンス化できない
Driver

「すでに生成済みなので、インスタンス化の必要はないわけですね。じゃあ、静的メソッドを実行するときみたいに、オブジェクト名を指定すればいいんじゃないですか?」


呼び出せない
Navigator

「Globalオブジェクトに属するメソッドを静的メソッドのように呼び出せるかというと、これもできません。このように書かなくても、Globalオブジェクトのメソッド名をそのまま書けばよいのです」


Driver

「コードを書くときの『何を.どうする』が使えじゃないですか」


Globalオブジェクトのプロパティやメソッドには、参照変数なしでアクセスできる。
Navigator

「要は、実行もとのオブジェクトを必要としないんです。JavaScriptの最上位の部分でGlobalオブジェクトのプロパティやメソッドが定義されているので、これまでのように『インスタンスの参照変数名.メソッド名():』や、Math()オブジェクトの静的メソッドのように『オブジェクト名.メソッド名();』のように書く必要はなく、いきなり『メソッド名()』と書いて呼び出せるのです


Globalオブジェクトのプロパティとメソッド

Navigator

「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のコードに変換して実行する。

Globalオブジェクトのコンストラクター

Navigator

「コンストラクターは、オブジェクトのインスタンスを生成するための関数です。これまでに見てきたStringなどのラッパーオブジェクト、さらにはObjectオブジェクトのインスタンスを生成するコンストラクターは、すべてGlobalオブジェクトのコンストラクターです」


グローバルコンストラクター
コンストラクター名 説明
Array() Arrayオブジェクトのインスタンスを生成する。
Boolean() Booleanオブジェクトのインスタンスを生成する。
Date() Dateオブジェクトのインスタンスを生成する。
Function() Functionオブジェクトのインスタンスを生成する。
Number() Numberオブジェクトのインスタンスを生成する。
Object() Objectオブジェクトのインスタンスを生成する。
RegExp() RegExpオブジェクトのインスタンスを生成する。
String() Stringオブジェクトのインスタンスを生成する。

Hint ところで「関数」と「メソッド」って何が違うの?

 これまでに関数という用語がよく出てきました。折に触れ何度かお話したことがありますが、関数とは、特定の処理を行うコードをまとめておき、これに名前を付けたものです。関数名を書くことで呼び出すことができ、呼び出す際に何らかの値を渡すと関数内のコードブロックで処理を行い、結果が返されてきます。このようなことからよく使う決まりきった処理は関数として定義しておけば、いつでも関数を呼び出して処理を行わせることができるというわけです。

 では、いったいメソッドとどこが違うのかというと、実はメソッドの実体は関数なのです。

 そもそもJavaScriptでは関数もオブジェクトとして扱われます。で、関数には名前を付けますので、関数名というのはオブジェクトを参照するためのプロパティということになります。JavaScriptでは『プロパティで参照される関数』のことをメソッドと呼びます。ということは、結局のところ『JavaScriptの関数はすべてメソッドである』と見なすことができるんですね。

 メソッドは「オブジェクト名.メソッド名()」のように書いて呼び出しますが、メソッド名を指定することで呼び出されるのは、メソッドとして登録されている関数ということなのです。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る