本頁の目次 目次

15.1 Global オブジェクト (The Global Object)

グローバルオブジェクトは [[Construct]] プロパティを持たない; new 演算子を添えてコンストラクタとしてグローバルオブジェクトを使用することはできない。

グローバルオブジェクトは [[Call]] プロパティを持たない。関数としてグローバルオブジェクトを呼び出すことはできない。

グローバルオブジェクトの [[Prototype]] 及び [[Class]] プロパティの値は実装依存である。

15.1.1 Global オブジェクトの値プロパティ (Value Properties of the Global Object)

15.1.1.1 NaN

Nan の初期値は NaN (セクション 8.5) である。このプロパティの属性は { DontEnum, DontDelete } である。

15.1.1.2 Infinity

Infinity の初期値は +∞ (セクション 8.5) である。このプロパティの属性は { DontEnum, DontDelete } である。

15.1.1.3 undefined

undefined の初期値は undefined (セクション 8.1) である。このプロパティの属性は { DontEnum, DontDelete } である。

15.1.2 Global オブジェクトの関数プロパティ (Function Properties of the Global Object)

15.1.2.1 eval (x)

eval 関数が引数 x で呼出されるとき、次のステップが取られる:

  1. x が文字列値でなければ、 x を返す。
  2. xProgram として解析する。解析に失敗したら、例外 SyntaxError を投げる (セクション 16 も参照)。
  3. ステップ 2 からプログラムを評価。
  4. Result(3).type が normal かつその completion 値が値 V ならば、値 V を返す。
  5. Result(3).type が normal かつその completion 値が empty ならば、値 undefined を返す。
  6. Result(3).type は throw のはずである。例外として Result(3).value を投げる。

eval プロパティの値は直接呼出し以外 (つまり、 CallExpression 中の MenberExpression である Identifier としてのその名前の明示的な利用による以外) の任意の方法で用いられるか、または eval プロパティに割り当てられていれば、例外 EvalError を投げてよい。

15.1.2.2 parseInt (string , radix)

parseInt 関数は、 radix の指定にしたがい引数 string の内容を解釈して判定される整数値を生成する。文字列内の先行する空白文字は無視される。 radixundefined または 0 ならば、それは 10 と仮定される。その数字が文字 0x または 0X で始まる場合は radix は 16 と仮定される。任意の radix-16 数は文字 0x または 0X で始まってもよい。

parseInt 関数が呼出されると、次のステップが取られる:

  1. ToString(string) を呼出す。
  2. S を新規に生成した Result(1) の部分文字列とし、 StrWhiteSpaceChar でない最初の文字とそれ以降の全ての文字からなる。 (言い換えると、先行する空白を除去する。)
  3. sign を 1 とする。
  4. S が空でなく、かつ S の最初の文字がマイナス記号 - ならば、 sign を -1 とする。
  5. S が空でなく、かつ S の最初の文字がプラス記号 + またはマイナス記号 - ならば、 S から最初の文字を除去する。
  6. R = ToInt32(radix) とする。
  7. R = 0 ならば、 ステップ 11 へ。
  8. R < 2 または R > 36 ならば、 NaN を返す。
  9. R = 16 ならば、 ステップ 13 へ。
  10. ステップ 14 へ。
  11. R = 10 とする。
  12. S の長さが少なくとも 1 で、かつ S の最初の文字が "0" ならば、実装の裁量で R = 8 とするか、あるいは R を変更せずそのままにする。
  13. S の長さが少なくとも 2 で、かつ S の最初の 2 文字が "0x" か "0X" ならば、その最初の 2 文字を S から取り除き、 R = 16 とする。
  14. SR 進数数字でない任意の文字を含むならば、 Z を、その文字が出現するより前の全ての文字からなる S の部分文字列とする; そうでなければ、 ZS とする。
  15. Z が空ならば、 NaN を返す。
  16. 値 10 から 35 までの数字に文字 A-Z と a-z を使用する R 進数表記にて Z で表される、数学的整数を算出する。 (しかしながら, if R が 10 で、かつ Z が 20 桁以上であるならば、 20 桁目以降の各桁の数字は、実装の選択で数字 0 で置換してよい; そして R が 2, 4, 8, 10, 16, 32 以外ならば、 Result(16) は、 R 進数表記にて Z で表される数学的整数値の実装依存の近似値であってよい。)
  17. Result(16) の数値を算出する。
  18. sign × Result(17) を返す。

NOTE parseInt は、文字列の先行する成分だけを整数値として解釈してよい; それは整数表記の一部として解釈できない任意の文字を無視し、そのような文字が無視されたことのいかなる徴候も与えられない。

radix が 0 または undefined であり、 string の数が数字 0 で始まり xX も続かないとき、実装は、自由な判断で、数を 8 進数とも 10 進数とも解釈してよい。実装はこの場合、 10 進数として数を解釈することが推奨される。

15.1.2.3 parseFloat (string)

parseFloat 関数は、 10 進数リテラルとして引数 string の内容解析器に書き取られる数値を生成する。

parseFloat 関数が呼出されると、次のステップが取られる:

  1. ToString(string) を呼出す。
  2. StrWhiteSpaceChar でない最左の文字とその右側の全ての文字からなる、 Result(1) の部分文字列を算出する。 (言い換えると、先行する空白を除去する。)
  3. Result(2) も、 Result(2) の先頭からの任意の部分文字列も StrDecimalLiteral の構文 (9.3.1 参照) を満たさないならば、 NaN を返す。
  4. StrDecimalLiteral の構文を満たす、 Result(2) の先頭からの最長部分文字列を算出する。 Result(2) 自身でもよい。
  5. Result(4) の数学値の数値を返す。

NOTE parseFloat 文字列の先行する成分だけを数値として解釈してよい;

それは 10 進数表記の一部として解釈できない任意の文字を無視し、そのような文字が無視されたことのいかなる徴候も与えられない。

15.1.2.4 isNaN (number)

引数に ToNumber を適用し、結果が NaN であれば true, そうでなければ false を返す。

15.1.2.5 isFinite (number)

引数に ToNumber を適用し、結果が NaN, +∞, -∞ であれば false, そうでなければ true を返す。

15.1.3 URI 処理関数のプロパティ (URI Handling Function Properties)

Uniform Resource Identifiers, あるいは URI は、リソース (つまり、ウェブページやファイル)を識別する文字列であり、インターネット上でそれらにアクセスするプロトコル (すなわち HTTP や FTP) を輸送する。 ECMAScript 言語自身は、セクション 15.1.3.1, 15.1.3.2, 15.1.3.3, 15.1.3.4 に URI を符号化また復号化する関数を述べるのみで、他の URI を使用するサポートを提供しない。

NOTE ECMAScript 実装の多くは、ウェブページを操作する追加の関数とメソッドを提供する; これらの関数はこの標準の適用範囲上にある。 URI は成分分離子によって分割された成分の並びで構成される。一般的な形式は:

Scheme : First / Second ; Third ? Fourth

イタリック体の名前は成分をあらわし、 ":", "/", ";", "?" は分離子として使用される予約文字をあらわす。 encodeURI 関数と decodeURI 関数は、完璧な URI の動作を意図される; URI 中の任意の予約文字は、特殊な意味を持ち、従って符号化されないことが意図されると考える。 encodeURIComponent 関数と decodeURIComponent 関数は、 URI の個別の成分としての動作を意図される; 任意の予約文字はテキストをあらわし、したがって成分が完璧な URI の一部であるとき、予約文字として解析されないように符号化されなければならない、と考える。

次の字句文法は、符号化された URI の形式を規定する。

uri :::
uriCharactersopt
uriCharacters :::
uriCharacter uriCharactersopt
uriCharacter :::
uriReserved
uriUnescaped
uriEscaped
uriReserved ::: one of
; / ? : @ & = + $ ,
uriUnescaped :::
uriAlpha
DecimalDigit
uriMark
uriEscaped :::
% HexDigit HexDigit
uriAlpha ::: one of
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
uriMark ::: one of
- _ . ! ~ * ' ( )

URI 中に含まれる文字が、上に挙げられていないとき、また予約文字に与えられる特殊な意味を持つと意図されないとき、その文字は符号化されなければならない。文字はまず UTF-8 変換を用いてオクテットのシーケンスに変換される。サロゲートペア (surrogate pairs) はまず UCS-2 から UCS-4 符号化に変換される。 (範囲 [0, 127] のコードポイントについては、これは同じ値の単一のオクテットの結果である。) 結果のオクテットのシーケンスは、 "%xx" 形式のエスケープシーケンスであらわされる各オクテットの文字列に変換される。

符号化とエスケープの処理は、 2 個の文字列引数 string と unescapedSet をとる隠し関数 Encode によって記述される。この関数は解説上の目的でのみ定義される。

  1. string の文字数を算出する。
  2. R を空文字列とする。
  3. k を 0 とする。
  4. k が Result(1) と等しいならば、 R を返す。
  5. C を string 中の位置 k の文字とする。
  6. C が unescapedSet 中にないならば、 ステップ 9 へ。
  7. S を文字 C のみで構成される文字列とする。
  8. ステップ 24 へ。
  9. C のコードポイント値が 0xDC00 以上 0xDFFF 以下ならば、例外 URIError を投げる。
  10. C のコードポイント値が 0xD800 未満、または 0xDBFF より大きいならば、 VC のコードポイント値として ステップ 16 へ。
  11. k を 1 増分する。
  12. k と Result(1) が等しいならば、 例外 URIError を投げる。
  13. string 中の位置 k の文字のコードポイント値を取得する。
  14. Result(13) が 0xDC00 未満、または 0xDFFF より大きいならば、 例外 URIError を投げる。
  15. V を (((C のコードポイント値) - 0xD800) * 0x400 + (Result(13) - 0xDC00) + 0x10000) とする。
  16. Octets を V の UTF-8 変換の適用結果であるオクテットの配列とし、 L を配列のサイズとする。
  17. j を 0 とする。
  18. Octets 内の位置 j の値を取得する。
  19. XY を Result(18) の値を符号化する 2 個の大文字の 16 進数字として、 S を 3 文字 "%XY" で構成される文字列とする。
  20. R を、R と S の前の値を連結して算出した、新しい文字列とする。
  21. j を 1 増分する。
  22. jL と等しいならば、 ステップ 25 へ。
  23. ステップ 18 へ。
  24. R を、R と S の前の値を連結して算出した、新しい文字列とする。
  25. k を 1 増分する。
  26. ステップ 4 へ。

アンエスケープと復号化の処理は、 2 個の文字列引数 string と reservedSet をとる隠し関数 Decode によって記述される。この関数は解説上の目的でのみ定義される。

  1. string の文字数を算出する。
  2. R を空文字列とする。
  3. k を 0 とする。
  4. k が Result(1) と等しいならば、 R を返す。
  5. C を string 中の位置 k の文字とする。
  6. C が '%' でないならば、 ステップ 40 へ。
  7. start を k とする。
  8. k + 2 が Result(1) と等しいまたはより大きいならば、 例外 URIError を投げる。
  9. string 中の位置 (k+1) と 位置(k + 2) の文字が 16 進数字をあらわさないならば、例外 URIError を投げる。
  10. B を 位置 (k+1) と 位置(k + 2) の 2 個の 16 進数字であらわされる 8 ビット値とする。
  11. k を 2 増分する。
  12. B の最大桁ビットが 0 ならば、 C をコードポイント値 B の文字として、 ステップ 37 へ。
  13. n を、 (B << n) & 0x80 が 0 と等しくなるような、最小の負でない値とする。
  14. n が 1 と等しい、または n が 4 より大きいならば、 例外 URIError を投げる。
  15. Octets を、サイズ n の 8 ビット整数の配列とする。
  16. Octets の位置 0 を、 B に設定する。
  17. k + (3 * (n - 1)) が Result(1) と等しいかより大きいならば、 例外 URIError を投げる。
  18. j を 1 とする。
  19. jn と等しいならば、 ステップ 29 へ。
  20. k を 1 増分する。
  21. 位置 k の文字が '%' でないならば、 例外 URIError を投げる。
  22. string 内の位置 (k +1) と位置 (k + 2) の文字が 16 進数字をあらわさないならば、例外 URIError を投げる。
  23. B を、位置 (k + 1) と位置 (k + 2) の 2 個の 16 進数字で表される 8 ビット値とする。
  24. B の最大桁から 2 ビットが 10 でないならば、 例外 URIError を投げる。
  25. k を 2 増分する。
  26. Octets の位置 j を、 B に設定する。
  27. j を 1 増分する。
  28. ステップ 19 へ。
  29. V を、 Octets に UTF-8 変換を適用し取得した値とする。すなわち、オクテットの配列から32ビット値に変換される。
  30. V が 0x10000 より小さいならば、 ステップ 36 へ。
  31. V が 0x10FFFF より大きいならば、 例外 URIError を投げる。
  32. L を (((V - 0x10000) & 0x3FF) + 0xDC00) とする。
  33. H を ((((V - 0x10000) >> 10) & 0x3FF) + 0xD800) とする。
  34. S を、コードポイント値 HL の 2 個の文字で構成される文字列とする。
  35. ステップ 41 へ。
  36. C をコードポイント値 V の文字とする。
  37. C が reservedSet 内にないならば、 ステップ 40 へ。
  38. S を、 string の位置 start から位置 k までを含む部分文字列とする。
  39. ステップ 41 へ。
  40. S を文字 C のみで構成される文字列とする。
  41. R を、R と S の前の値を連結して算出した、新しい文字列とする。
  42. k を 1 増分する。
  43. ステップ 4 へ。

NOTE Uniform Resource Identifiers の構文は、 RFC2396 で与えられる。

NOTE UTF-8 の公式な説明と実装は、 Unicode Standard, Version 2.0, Appendix A で与えられる。

UTF-8 では、 1 個から 6 個のオクテットのシーケンスで符号化される。ある一つの "シーケンス" のオクテットだけが上位ビットを 0 に設定し、残り 7 ビットは文字値の符号化に使用されている。 n 個のオクテットのシーケンスにおいて、 n>1 として、最初のオクテットは n 個の上位ビットを 1 に設定, 続くビットを 0 に設定する。オクテットの残りのビットは、符号化される文字の値からのビットで構成される。続くオクテットの全ては上位ビットを 1 に設定し、続くビットを 0 に設定、それぞれ残り 6 ビット 符号化された文字からのビットで構成される。 ECMAScript 文字の可能な UTF-8 符号は:

コードポイント値 表現 1st Octet 2nd Octet 3rd Octet 4th Octet
0x0000 - 0x007F 00000000 0zzzzzzz 0zzzzzzz  
0x0080 - 0x07FF 00000yyy yyzzzzzz 110yyyyy 10zzzzzz  
0x0800 - 0xD7FF xxxxyyyy yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz  
0xD800 - 0xDBFF
(0xDC00 - 0xDFFF
が後に続く)
110110vv vvwwwwxx
(110111yy yyzzzzzz
が後に続く)
11110uuu 10uuwwww 10xxyyyy 10zzzzzz
0xD800 - 0xDBFF
(0xDC00 - 0xDFFF
が後に続かない)
例外 URIError が発生  
0xDC00 - 0xDFFF 例外 URIError 発生  
0xE000 - 0xFFFF xxxxyyyy yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz  

Where

uuuuu = vvvv + 1

to account for the addition of 0x10000 as in 3.7, Surrogates Unicode Standard version 2.0.

コードポイント値 0xD800-0xDFFF の範囲がサロゲートペアの符号化に使用される; 上記の変換は UCS-2 のサロゲートペアを UCS-4 表現に結合し、結果の 21 ビット値を UTF-8 に符号化する。復号化は、サロゲートペアを再構築する。

15.1.3.1 decodeURI (encodedURI)

decodeURI 関数は新しいバージョンの URI を算出する。その中で、各エスケープシーケンスと encodeURI 関数により取り入れられる種類の UTF-8 符号は、そのあらわす文字に置換される。 encodeURI により取り入れられることのないエスケープシーケンスは置換されない。

decodeURI 関数が 1 個の引数 encodedURI で呼出されるとき、次のステップが取られる:

  1. ToString(encodedURI) を呼出す。
  2. reservedURISet を、 uriReserved と "#" の内で有効な各文字の一例を構成する文字列とする。
  3. Decode(Result(1), reservedURISet) を呼出す。
  4. Result(3) を返す。

NOTE 文字 "#" は、 URI 予約文字でなくてもエスケープシーケンスから復号されない。

15.1.3.2 decodeURIComponent (encodedURIComponent)

decodeURIComponent 関数は新しいバージョンの URI を算出する。その中で、各エスケープシーケンスと encodeURIComponent 関数により取り入れられる種類の UTF-8 符号は、そのあらわす文字に置換される。

decodeURIComponent 関数が 1 個の引数 encodedURIComponent で呼出されるとき、次のステップが取られる:

  1. ToString(encodedURIComponent) を呼出す。
  2. reservedURIComponentSet を空文字列とする。
  3. Decode(Result(1), reservedURIComponentSet) を呼出す。
  4. Result(3) を返す。

15.1.3.3 encodeURI (uri)

encodeURI 関数は、新しいバージョンの URI を算出する。その中で一定の文字の各インスタンスは、文字の UTF-8 符号をあらわす 1,2,3 個のエスケープシーケンスによって置換される。

encodeURI 関数が 1 個の引数 uri で呼出されるとき、次のステップが取られる:

  1. ToString(uri) を呼出す。
  2. unescapedURISet を、 uriReserved と uriUnescaped と "#" の中で有効な各文字の一例で構成される文字列とする。
  3. Encode(Result(1), unescapedURISet) を呼出す。
  4. Result(3) を返す。

NOTE 文字 "#" は、予約文字でも非エスケープ文字でもないが、エスケープシーケンスに符号化されない。

15.1.3.4 encodeURIComponent (uriComponent)

encodeURIComponent 関数は、 URI の新しいバージョンを算出する。その中で、一定の文字のインスタンスは、文字の UTF-8 符号化をあらわす 1,2,3 個のエスケープシーケンスに置換される。

encodeURIComponent が 1 個の引数 uriComponent で呼出されるとき、次のステップが取られる:

  1. ToString(uriComponent) を呼出す。
  2. unescapedURIComponentSet を、 uriUnescaped 内で有効なの各文字の一例を構成する文字列とする。
  3. Encode(Result(1), unescapedURIComponentSet) を呼出す。
  4. Result(3) を返す。

15.1.4 Global オブジェクトのコンストラクタプロパティ (Constructor Properties of the Global Object)

15.1.4.1 Object ( . . . )

セクション 15.2.1 及び 15.2.2 参照。

15.1.4.2 Function ( . . . )

セクション 15.3.1 及び 15.3.2 参照。

15.1.4.3 Array ( . . . )

セクション 15.4.1 及び 15.4.2 参照。

15.1.4.4 String ( . . . )

セクション 15.5.1 及び 15.5.2 参照。

15.1.4.5 Boolean ( . . . )

セクション 15.6.1 及び 15.6.2 参照。

15.1.4.6 Number ( . . . )

セクション 15.7.1 及び 15.7.2 参照。

15.1.4.7 Date ( . . . )

15.1.4.8 RegExp ( . . . )

セクション 15.10.3 及び 15.10.4 参照。

15.1.4.9 Error ( . . . )

セクション 15.11.1 及び 15.11.2 参照。

15.1.4.10 EvalError ( . . . )

15.1.4.11 RangeError ( . . . )

15.1.4.12 ReferenceError ( . . . )

15.1.4.13 SyntaxError ( . . . )

15.1.4.14 TypeError ( . . . )

15.1.4.15 URIError ( . . . )

15.1.5 Global オブジェクトのその他のプロパティ (Other Properties of the Global Object)

15.1.5.1 Math

Page Contents

Issued: / Revised: / All rights reserved. © 2002-2016 TAKI