atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
0x0b
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
0x0b
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
0x0b
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 0x0b
  • js-grammer03

0x0b

js-grammer03

最終更新:2011年08月18日 17:50

0x0b

- view
管理者のみ編集可
実行コンテキスト (Execution Contexts)

制御が ECMAScript の実行可能コードに転送される時に、制御は 実行コンテキスト に入る。アクティブな実行コンテキストは論理的にスタックを形成する。この論理的スタック上の実行コンテキストの頂点が、実行される実行コンテキストである。
10.1 定義 (Definitions)

10.1.1 Function オブジェクト (Function Objects)

Function オブジェクトには 2 種類ある:
プログラム関数 は、ソーステキスト内に FunctionDeclaration で定義される。あるいは、 FunctionExpression かコンストラクタとしての組込み Function オブジェクトを使用して動的に生成される。
内部関数 は、 parseInt や Math.exp のような、言語の組込みオブジェクトである。実装は、本仕様に記述されない実装依存の内部関数を提供してもよい。これらの関数は ECMAScript 文法に記述される実行可能コードを含まない。従ってそれらは実行コンテキストのこの議論から除外される。
10.1.2 実行可能コードの種類 (Types of Executable Code)

ECMAScript の実行可能コードの種類は 3 つある:
グローバルコード は ECMAScript の Program として扱われるソーステキストである。個々の Program のグローバルコードは FunctionBody 部分として解析されるソーステキストを含まない。
eval コード は組込み eval 関数に提供されるソーステキストである。より正確には、組込み eval 関数のパラメータが文字列なら、それは ECMAScript の Program として扱われる。個々の eval 呼び出しのための eval コードは、文字列パラメータのグローバルコード部分である。
関数コード は FunctionBody 部分として解析されるソーステキストである。個々の FunctionBody の関数コードは、ネストされた FunctionBody 部分として解析されるソーステキストを含まない。関数コードはまた、コンストラクタとして組込み Function オブジェクトを使用する際提供されるソーステキストもあらわす。より正確には、 Function コンストラクタに提供される最後のパラメータは文字列に変換され FunctionBody として扱われる。 Function コンストラクタにひとつ以上のパラメータが供給されれば、最後の一つを除いた残りのパラメータすべてが文字列に変換され、カンマを区切りに連結される。その結果の文字列は最後のパラメータで定義される FunctionBody のための FormalParameterList として解釈される。 Function の個々のインスタンス化のための関数コードはネストされた FunctionBody 部分として解析されるソーステキストを含まない。
10.1.3 変数の実体化 (Variable Instantiation)

各実行コンテキストは 変数オブジェクト (variable object) に結び付けられている。ソーステキスト内に宣言された変数と関数は変数オブジェクトのプロパティに追加される。関数コードについては、パラメータが変数オブジェクトのプロパティに追加される。
どのオブジェクトが変数オブジェクトに使われるか、どの属性がプロパティに使われるかは、コードの型に依存する。しかし、後の振る舞いは総括的である。実行コンテキストに入ると、プロパティは次の順に変数オブジェクトに結び付けられる:
関数コードでは: FormalParameterList で定義された仮引数ごとに、変数オブジェクトにプロパティを生成する。その名前は Identifier で、属性はコード型によって決定する。パラメータ値は呼出側によって Call の引数として供給される。呼出側が仮引数より少ないパラメータ値を供給するならば、余分な仮引数は値 undefined を持つ。 2 つ以上の仮引数が同じ名前のために同じプロパティを共有する場合、該当するプロパティは、後出のパラメータに供給された値を与えられる。この後出のパラメータ値が呼出側から供給されない場合、該当するプロパティの値は undefined である。
ソーステキスト順で、コード中の各 FunctionDeclaration 毎に、変数オブジェクトにプロパティを生成する。その名前は FunctionDeclaration の Identifier で、値にはセクション 13 に記述される Function オブジェクトの生成で返される結果が設定され、属性はコードの型によって決定する。変数オブジェクトが既にこの名前のプロパティを持っている場合、その値と属性を置換する。意味論的に、このステップは FormalParameterList プロパティの生成に続かなければならない。
コード中の各 VariableDeclaration あるいは VariableDeclarationNoIn 毎に、変数オブジェクトにプロパティを生成する。その名前は VariableDeclaration または VariableDeclarationNoIn 中の Identifier で、値は undefined 、属性はコードの型により決定する。変数オブジェクトが既にこの名前のプロパティを持っている場合、プロパティの値と属性は変更されない。意味論的に、このステップは FormalParameterList と FunctionDeclaration のプロパティ生成に続かなければならない。宣言される変数が、宣言された関数や仮引数と同じ名前を持っている場合、変数宣言は特に既存のプロパティを妨害しない。
10.1.4 スコープ連鎖と識別子の解決 (Scope Chain and Identifier Resolution)

各実行コンテキストは スコープ連鎖 (scope chain) に関連付けられている。スコープ連鎖はオブジェクトのリストで、Identifier の評価の際に検索される。制御が実行コンテキストに入るとき、コード型毎にオブジェクト集合の初期値を伴うスコープ連鎖が生成され、組み込まれる。実行コンテキスト内における実行の間、実行コンテキストのスコープ連鎖は with 文(12.10) と catch クローズ(12.14) によってのみ影響を及ぼされる。
実行中、構文的生成規則 PrimaryExpression : Identifier は次のアルゴリズムで評価される:
スコープ連鎖内で次のオブジェクトを取得する。一つもなければ、ステップ 5ヘ。
Result(1) の HasProperty メソッドを呼び、プロパティとして Identifier を渡す。
Result(2) が true ならば、基準オブジェクトが Result(1) でプロパティ名が Identifier である Reference 型の値を返す。
ステップ 1 へ。
基準オブジェクトが null でプロパティ名が Identifier である Reference 型の値を返す。
識別子評価の結果は常に、識別子文字列と等しいメンバ名成分を持つ Reference 型の値である。
10.1.5 Global オブジェクト (Global Object)

制御が任意の実行コンテキストに入る前に生成される、一意的な グローバルオブジェクト (セクション15.1) が存在する。最初はグローバルオブジェクトは次のプロパティを持つ:
Math, String, Date, parseInt 等のような組込みオブジェクト。これらは属性 { DontEnum } を持つ。
ホストの定義する追加プロパティ。これはグローバルオブジェクト自身を値とするプロパティを含めてよい; たとえば、HTML 文書オブジェクトモデルにおけるグローバルオブジェクトの window プロパティは、グローバルオブジェクトそれ自身である。
制御が実行コンテキストに入り、ECMAScript コードが実行されれば、グローバルオブジェクトに追加プロパティを追加しても、初期のプロパティを変更してもよい。
10.1.6 Activation オブジェクト (Activation Object)

関数コードによって制御が実行コンテキストに入るとき、 Activation オブジェクトと呼ばれるオブジェクトが生成され実行コンテキストに結び付けられる。 Activation オブジェクトは属性 { DontDelete } のプロパティ arguments で初期化される。このプロパティの初期値は下に述べる arguments オブジェクトである。
Activation オブジェクトは変数の実体化を目的とした変数オブジェクトとして使用される。
Activation オブジェクトは純粋に仕様のメカニズムである。 Activation オブジェクトへのアクセスは ECMAScript プログラムには不可能である。 Activation オブジェクトのメンバへのアクセスは可能だが、 Activation オブジェクト自身へのアクセスはできない。基準オブジェクトが Activation オブジェクトである Reference 値に呼出操作が適用されるとき、その呼出の this 値として null が使われる。
10.1.7 this

アクティブな実行コンテキストそれぞれに結び付けられる this 値がある。this 値は呼出側と実行されるコード型に依存し、制御が実行コンテキストに入るときに決定される。実行コンテキストに結び付けられる this 値は不変である。
10.1.8 arguments オブジェクト (Arguments Object)

関数コードによって制御が実行コンテキストに入るとき、 arguments オブジェクトが作成され次のように初期化される:
argument オブジェクトの内部 Prototype プロパティの値は、オリジナルの Object prototype オブジェクトで、 Object.prototype (セクション15.2.3.1) の初期値である。
属性 { DontEnum } のプロパティ callee を作成する。このプロパティの初期値は実行されている Function オブジェクトである。これは再帰する匿名ファンクションを許す。
属性 { DontEnum } のプロパティ length を作成する。このプロパティの初期値は呼出側から供給された実際のパラメータの数である。
0 以上 length プロパティの値未満の整数 arg それぞれについて、属性 { DontEnum } のプロパティ ToString(arg) が作成される。このプロパティの初期値は対応するパラメータの呼出側に供給される実際の値である。最初の実際のパラメータ値が arg = 0、2 番目は arg = 1, 以下同様である。arg が Function オブジェクトの仮引数の数より小さい場合、このプロパティは Activation オブジェクトの対応するプロパティとその値を共有する。このことは、このプロパティの変更が Activation オブジェクトの対応するプロパティを変更すること、そしてその逆を意味する。
10.2 実行コンテキストの開始 (Entering An Execution Context)

各関数とコンストラクタの呼出は、新しい実行コンテキストを開始する。関数がそれ自身の再帰的呼出であっても、各リターンは実行コンテキストを終了する。投げられた例外が受け取られない場合は、一つ以上の実行コンテキストを終了してよい。
制御が実行コンテキストを開始するとき、スコープ連鎖が生成・初期化され、変数の実体化が行われ、this 値が決定される。
スコープ連鎖の実体化、変数の実体化、this 値の決定は、開始するコード型に依存する。
10.2.1 グローバルコード (Global Code)

スコープ連鎖が作成され、グローバルオブジェクトのみの構成で初期化される。
変数の実体化が行われ、変数オブジェクトにグローバルオブジェクト、プロパティ属性 { DontDelete } が用いられる。
this 値はグローバルオブジェクトである。
10.2.2 Eval コード (Eval Code)

制御が eval コードの実行コンテキストを開始するとき、前のアクティブな実行コンテキストは、 呼出コンテキスト として参照され、スコープ連鎖、変数オブジェクト、 this 値の決定に使用される。呼出コンテキストがなければ、スコープ連鎖、変数の実体化、this 値の決定の初期化は、グローバルコードとして行われる。
スコープ連鎖が初期化され、呼出コンテキストのスコープ連鎖と同じオブジェクト、同じ順序になるように構成される。これは with 宣言および catch クローズによって呼出コンテキストのスコープ連鎖に追加されるオブジェクトを含む。
変数の実体化が行われ、呼出コンテキストの変数オブジェクト、プロパティ属性 { } が用られる。
this 値は呼出コンテキストの this 値と同じである。
10.2.3 関数コード (Function Code)

スコープ連鎖が初期化され、 Activation オブジェクトに Function オブジェクトの Scope プロパティに蓄積されたスコープ連鎖内のオブジェクトが続くように構成される。
変数の実体化が行われ、変数オブジェクトに Activation オブジェクト、プロパティ属性 { DontDelete } が用いられる。
this 値は呼出側が提供する。呼出側が提供する this 値がオブジェクトでない場合(null である場合を含む)、 this 値はグローバルオブジェクトとする。

式 (Expressions)

11.1 基本式 (Primary Expressions)

Syntax
PrimaryExpression :
this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )
11.1.1 this キーワード (this Keyword)

this キーワードは実行コンテキストの this 値を評価する。
11.1.2 識別子参照 (Identifier Reference)

識別子は、セクション 10.1.4 で述べたスコープ規則を使用して評価される。この識別子評価の結果は常に Reference 型の値である。
11.1.3 リテラル参照 (Literal Reference)

リテラルはセクション 7.8 に述べるように評価される。
11.1.4 Array 初期化子 (Array Initialiser)

Array 初期化子は、 Array オブジェクトの初期化を記述する式で、リテラル形式で書かれる。それは配列要素をあらわす 0 個以上の式のリストで、それぞれ角括弧 "[ ]" で囲まれる。要素はリテラルである必要はない; それらは Array 初期化子が評価される度に評価される。
配列要素は要素リストの開始、中間、末尾で省略もできる。要素リスト中で AssignmentExpression の先行しないカンマは、欠けた配列要素が Array の長さに寄与し、続く要素のインデックスを増加させる。省略された配列要素は定義されない。
Syntax
ArrayLiteral :
[ Elisionopt ]
[ ElementList ]
[ ElementList , Elisionopt ]
ElementList :
Elisionopt AssignmentExpression
ElementList , Elisionopt AssignmentExpression
Elision :
,
Elision ,
Semantics
生成規則 ArrayLiteral : [ Elisionopt ] は、次のように評価される:
式 new Array() と同様に、新規に配列を生成する。
Elision を評価; 存在しなければ、数値 0 を用いる。
Result(1) の Put メソッドを、引数 "length" と Result(2) で呼出す。
Result(1) を返す。
生成規則 ArrayLiteral : [ ElementList ] は、次のように評価される:
ElementList を評価。
Result(1) を返す。
生成規則 ArrayLiteral : [ ElementList , Elisionopt ] は、次のように評価される:
ElementList を評価。
Elision を評価; 存在しなければ、数値 0 を用いる。
Result(1) の Get メソッドを、引数 "length" で呼出す。
Result(1) の Put メソッドを、引数 "length" と (Result(2)+Result(3)) で呼出す。
Result(1) を返す。
生成規則 ElementList : Elisionopt AssignmentExpression は、次のように評価される:
式 new Array() と同様に、新規に配列を生成する。
Elision を評価; 存在しなければ、数値 0 を用いる。
AssignmentExpression を評価。
GetValue(Result(3)) を呼出す。
Result(1) の Put メソッドを、引数 Result(2) と Result(4) で呼出す。
Result(1) を返す。
生成規則 ElementList : ElementList , Elisionopt AssignmentExpression は、次のように評価される:
ElementList を評価。
Elision を評価; 存在しなければ、数値 0 を用いる。
AssignmentExpression を評価。
GetValue(Result(3)) を呼出す。
Result(1) の Get メソッドを、引数 "length" で呼出す。
Result(1) の Put メソッドを、引数 (Result(2)+Result(5)) と Result(4) で呼出す。
Result(1) を返す。
生成規則 Elision : , は、次のように評価される:
数値 1 を返す。
生成規則 Elision : Elision , は、次のように評価される:
Elision を評価。
(Result(1)+1) を返す。
11.1.5 オブジェクト初期化子 (Object Initialiser)

オブジェクト初期化子は Object の初期化を記述する式であり、リテラルのような形式で書かれる。プロパティ名とその値の 0 個以上の組のリストを { } で囲む。値はリテラルである必要はない; オブジェクト初期化子が評価される度に、それは評価される。
Syntax
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
PropertyNameAndValueList :
PropertyName : AssignmentExpression
PropertyNameAndValueList , PropertyName : AssignmentExpression
PropertyName :
Identifier
StringLiteral
NumericLiteral
Semantics
生成規則 ObjectLiteral : { } は、次のように評価される:
式 new Object() と同様に新規にオブジェクトを生成する。
Result(1) を返す。
生成規則 ObjectLiteral : { PropertyNameAndValueList } は、次のように評価される:
PropertyNameAndValueList を評価。
Result(1) を返す;
生成規則 PropertyNameAndValueList : PropertyName : AssignmentExpression は、次のように評価される:
式 new Object() と同様に新規にオブジェクトを生成する。
PropertyName を評価。
AssignmentExpression を評価。
GetValue(Result(3)) を呼出す。
Result(1) の Put メソッドを、引数 Result(2) と Result(4) で呼出す。
Result(1) を返す。
生成規則 PropertyNameAndValueList : PropertyNameAndValueList , PropertyName : AssignmentExpression は、次のように評価される:
PropertyNameAndValueList を評価。
PropertyName を評価。
AssignmentExpression を評価。
GetValue(Result(3)) を呼出す。
Result(1) の Put メソッドを、引数 Result(2) と Result(4) で呼出す。
Result(1) を返す。
生成規則 PropertyName : Identifier は、次のように評価される:
Identifier と同じ文字シーケンスで構成される文字列リテラルを形成する。
Result(1) を返す。
生成規則 PropertyName : StringLiteral は、次のように評価される:
StringLiteral の値を返す。
生成規則 PropertyName : NumericLiteral は、次のように評価される:
NumericLiteral の値を形成する。
ToString(Result(1)) を返す。
11.1.6 グループ化演算子 (The Grouping Operator)

生成規則 PrimaryExpression : ( Expression ) は、次のように評価される:
Expression を評価。これは Reference 型でもよい。
Result(1) を返す。
NOTE このアルゴリズムは、 Result(1) に GetValue を適用しない。 delete や typeof のような演算子に括弧のついた式を適用できるようにすることがこれについての主な動機である。
11.2 左辺式 (Left-Hand-Side Expressions)

Syntax
MemberExpression :
PrimaryExpression
FunctionExpression
MemberExpression [ Expression ]
MemberExpression . Identifier
new MemberExpression Arguments
NewExpression :
MemberExpression
new NewExpression
CallExpression :
MemberExpression Arguments
CallExpression Arguments
CallExpression [ Expression ]
CallExpression . Identifier
Arguments :
( )
( ArgumentList )
ArgumentList :
AssignmentExpression
ArgumentList , AssignmentExpression
LeftHandSideExpression :
NewExpression
CallExpression
11.2.1 プロパティアクセス演算子 (Property Accessors)

ドット記法を用いて、プロパティは名前によりアクセスされる:
MemberExpression . Identifier
CallExpression . Identifier
または括弧記法で:
MemberExpression [ Expression ]
CallExpression [ Expression ]
ドット記法は次の構文的変換で説明される:
MemberExpression . Identifier
の振る舞いは次と同等である。
MemberExpression [ <identifier-string> ]
同様に
CallExpression . Identifier
の振る舞いは次と同等である。
CallExpression [ <identifier-string> ]
<identifier-string> のところは Identifier として同じ文字シーケンスを構成する文字列リテラルである。
生成規則 MemberExpression : MemberExpression [ Expression ] は次のように評価される:
MemberExpression を評価。
GetValue(Result(1)) を呼出す。
Expression を評価。
GetValue(Result(3)) を呼出す。
ToObject(Result(2)) を呼出す。
ToString(Result(4)) を呼出す。
基準オブジェクトが Result(5) でプロパティ名が Result(6) である Reference 型の値を返す。
生成規則 CallExpression : CallExpression [ Expression ] は全く同じ方法で評価されるが、ステップ 1 では CallExpression が評価される。
11.2.2 new 演算子 (The new Operator)

生成規則 NewExpression : new NewExpression は、次のように評価される:
NewExpression を評価する。
GetValue(Result(1)) を呼出す。
Type(Result(2)) が Object でなければ、例外 TypeError を投げる。
Result(2) が内部 Construct メソッドを実装しなければ、例外 TypeError を投げる。
引数なしで Result(2) の Construct メソッドを呼出す。(引数値に空リストを提供する。)
Result(5) を返す。
生成規則 MemberExpression : new MemberExpression Arguments は、次のように評価される:
MenberExpression を評価する。
GetValue(Result(1)) を呼出す。
内部に引数値リストを持つ Arguments を評価する。
Type(Result(2)) が Object でなければ、例外 TypeError を投げる。
Result(2) が内部 Construct メソッドを実装しなければ、例外 TypeError を投げる。
Result(2) の Construct メソッドを呼び、引数値にリスト Result(3) を提供する。
Result(6) を返す。
11.2.3 関数呼出し (Function Calls)

生成規則 CallExpression : MemberExpression Arguments は、次のように評価される:
MemberExpression を評価。
Arguments を評価し、引数値の内部 List を生成する。(セクション 11.2.4)。
GetValue(Result(1)) を呼出す。
Type(Result(3)) が Object でなければ、例外 TypeError を投げる。
Result(3) が内部 Call メソッドを実装しなければ、例外 TypeError を投げる。
Type(Result(1)) が Reference ならば、 Result(6) は GetBase(Result(1)) 。そうでなければ、 Result(6) は null 。
Result(6) が Activation オブジェクトならば、 Result(7) は null 。そうでなければ、 Result(7) は Result(6) と同じ。
Result(3) の Call メソッドを呼び、this 値に Result(7) 、引数値にリスト Result(2) を渡す。
Result(8) を返す。
生成規則 CallExpression : CallExpression Arguments は全く同様に評価されるが、ステップ 1 では CallExpression が評価される。
NOTE Result(3) が Native ECMAScript オブジェクトならば、 Result(8) はけして Reference 型にはならない。 Host オブジェクト呼び出しが Reference 型の値を返すかどうかは、実装依存である。
11.2.4 引数リスト (Argument Lists)

引数リストの評価は値による内部的リスト (セクション 8.8) を生成する。
生成規則 Arguments : ( ) は、次のように評価される:
値による空の内部的リストを返す。
生成規則 Arguments : ( ArgumentList ) は、次のように評価される:
ArgumentList を評価。
Result(1) を返す。
生成規則 ArgumentList : AssignmentExpression は、次のように評価される:
AssignmentExpression を評価。
GetValue(Result(1)) を呼出す。
唯一の項目が Result(2) である内部的リストを返す。
生成規則 ArgumentList : ArgumentList , AssignmentExpression は、次のように評価される:
ArgumentList を評価。
AssignmentExpression を評価。
GetValue(Result(2)) を呼出す。
Result(1) より 1 大きい長さ、Result(1) の項目の末尾に Result(3) を続けた項目を持つ、新しい内部的リストを返す。
11.2.5 関数式 (Function Expressions)

生成規則 MemberExpression : FunctionExpression は、次のように評価される:
FunctionExpression を評価。
Result(1) を返す。
11.3 後置式 (Postfix Expressions)

Syntax
PostfixExpression :
LeftHandSideExpression
LeftHandSideExpression [LineTerminator 無し] ++
LeftHandSideExpression [LineTerminator 無し] --
11.3.1 後置増分演算子 (Postfix Increment Operator)

生成規則 PostfixExpression : LeftHandSideExpression [no LineTerminator here] ++ は、次のように評価される:
LeftHandSideExpression を評価。
GetValue(Result(1)) を呼出す。
ToNumber(Result(2)) を呼出す。
  1. 演算子と同じ規則で (セクション 11.6.3)、Result(3) に値 1 を加える。
PutValue(Result(1), Result(4)) を呼出す。
Result(3) を返す。
11.3.2 後置減分演算子 (Postfix Decrement Operator)

生成規則 PostfixExpression : LeftHandSideExpression [no LineTerminator here] -- は、次のように評価される:
LeftHandSideExpression を評価。
GetValue(Result(1)) を呼出す。
ToNumber(Result(2)) を呼出す。
  • 演算子と同じ規則 (セクション 11.6.3) で、 Result(3) から値 1 を引く。
PutValue(Result(1), Result(4)) を呼出す。
Result(3) を返す。
11.4 単項演算子 (Unary Operators)

Syntax
UnaryExpression :
PostfixExpression
delete UnaryExpression
void UnaryExpression
typeof UnaryExpression
    1. UnaryExpression
    • UnaryExpression
  1. UnaryExpression
  • UnaryExpression
~ UnaryExpression
! UnaryExpression
11.4.1 delete 演算子 (The delete Operator)

生成規則 UnaryExpression : delete UnaryExpression は、次のように評価される:
UnaryExpression を評価。
Type(Result(1)) が Reference でなければ、 true を返す。
GetBase(Result(1)) を呼出す。
GetPropertyName(Result(1)) を呼出す。
Result(3) の Delete メソッドを呼び、削除するプロパティ名として Result(4) を渡す。
Result(5) を返す。
11.4.2 void 演算子 (The void Operator)

生成規則 UnaryExpression : void UnaryExpression は、次のように評価される:
UnaryExpression を評価。
GetValue(Result(1)) を呼出す。
undefined を返す。
11.4.3 typeof 演算子 (The typeof Operator)

生成規則 UnaryExpression : typeof UnaryExpression は、次のように評価される:
UnaryExpression を評価。
Type(Result(1)) が Reference でなければ、 ステップ 4 へ。
GetBase(Result(1)) が null ならば、 "undefined" を返す。
GetValue(Result(1)) を呼出す。
次の表にしたがって、 Type(Result(4)) から決定される文字列を返す:
Type Result
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Object (native and doesn't implement Call) "object"
Object (native and implements Call) "function"
Object (host) Implementation-dependent
11.4.4 前置増分演算子 (Prefix Increment Operator)

生成規則 UnaryExpression : ++ UnaryExpression は、次のように評価される:
UnaryExpression を評価。
GetValue(Result(1)) を呼出す。
ToNumber(Result(2)) を呼出す。
  1. 演算子と同じ規則 (セクション 11.6.3) で、 Result(3) に値 1 を加える。
PutValue(Result(1), Result(4)) を呼出す。
Result(4) を返す。
11.4.5 前置減分演算子 (Prefix Decrement Operator)

生成規則 UnaryExpression : -- UnaryExpression は、次のように評価される:
UnaryExpression を評価。
GetValue(Result(1)) を呼出す。
ToNumber(Result(2)) を呼出す。
  • 演算子と同じ規則 (セクション 11.6.3) で、 Result(3) から値 1 を引く。
PutValue(Result(1), Result(4)) を呼出す。
Result(4) を返す。
11.4.6 単項 + 演算子 (Unary + Operator)

単項 + 演算子は項を Number 型に変換する。
生成規則 UnaryExpression : + UnaryExpression は、次のように評価される:
UnaryExpression を評価。
GetValue(Result(1)) を呼出す。
ToNumber(Result(2)) を呼出す。
Result(3) を返す。
11.4.7 単項 - 演算子 (Unary - Operator)

単項 - 演算子は項を Number 型に変換し、反転する。 +0 の否定は -0、 -0 の否定は +0 を生成することに注意。
生成規則 UnaryExpression : - UnaryExpression は、次のように評価される:
UnaryExpression を評価。
GetValue(Result(1)) を呼出す。
ToNumber(Result(2)) を呼出す。
Result(3) が NaN ならば、 NaN を返す。
Result(3) の否定; つまり、同じ大きさで符号が逆の数を算出する。
Result(5) を返す。
11.4.8 ビット否定演算子 (Bitwise NOT Operator) ( ~ )

生成規則 UnaryExpression : ~ UnaryExpression は、次のように評価される:
UnaryExpression を評価。
GetValue(Result(1)) を呼出す。
ToInt32(Result(2)) を呼出す。
Result(3) にビット補数を適用する。結果は符号付き 32 ビット整数である。
Result(4) を返す。
11.4.9 論理否定演算子 (Logical NOT Operator) ( ! )

生成規則 UnaryExpression : ! UnaryExpression は、次のように評価される:
UnaryExpression を評価。
GetValue(Result(1)) を呼出す。
ToBoolean(Result(2)) を呼出す。
Result(3) が true ならば、 false を返す。
true を返す。
11.5 剰除演算子 (Multiplicative Operators)

Syntax
MultiplicativeExpression :
UnaryExpression
MultiplicativeExpression * UnaryExpression
MultiplicativeExpression / UnaryExpression
MultiplicativeExpression % UnaryExpression
Semantics
@ を上に定義される演算子の一つとして、生成規則 MultiplicativeExpression : MultiplicativeExpression @ UnaryExpression は、次のように評価される:
MultiplicativeExpression を評価。
GetValue(Result(1)) を呼出す。
UnaryExpression を評価。
GetValue(Result(3)) を呼出す。
ToNumber(Result(2)) を呼出す。
ToNumber(Result(4)) を呼出す。
Result(5) と Result(6) に、指定された演算 (*, /, %) を適用する。下記のノート (セクション 11.5.1, 11.5.2, 11.5.3) を参照。
Result(7) を返す。
11.5.1 * 演算子の適用 (Applying the * Operator)

演算子は乗算を行い、項の積を生成する。乗算は可換的である。有限数精度? ( finite precision ) のため、 ECMAScript において、乗算は常に結合的なわけではない。
浮動小数点数乗算の結果は、 IEEE 754 倍精度計算規則により決定される:
どちらかの項が NaN ならば、結果は NaN である。
結果の符号は、両方の項が同じ符号を持つならば正符号であり、異なる符号を持つならば負符号である。
0 による無限大の乗算の結果は、 NaN になる。
無限大による無限大の乗算の結果は、 infinity である。符号は 上にあげた規則で決定する。
0 以外の有限数による無限大の乗算の結果は、符号付き無限大である。符合は上にあけた規則で決定する。
無限大でも 0 でも NaN でもない残りのケースでは、積が算出され、 IEEE 754 直近への丸めモードを使用して、直近の表現可能な値へ丸められる。大きさが表せないほど大きいならば、演算はオーバーフローし、結果は適切な符合の無限大となる。大きさが表せないほど小さいらば、演算はアンダーフローし結果は適切な符合の 0 となる。 ECMAScript 言語は、 IEEE 754 に定義される段階的アンダーフロー (gradual underflow) のサポートを必須とする。
11.5.2 / 演算子の適用 (Applying the / Operator)

/ 演算子は乗算を行い、項の商を生成する。左項が被除数で右項が除数である。 ECMAScript は整数除算を行わない。項と除算演算結果の全ては倍精度浮動小数点数である。乗算の結果は、 IEEE 754 算術規定により決定される:
どちらかの項が NaN ならば、結果は NaN である。
結果の符号は、両方の項が同じ符号を持つならば正符号であり、異なる符号を持つならば負符号である。
無限大の無限大による除算の結果は、 NaN である。
無限大の 0 による除算の結果は、無限大になる。符号は 上にあげた規則で決定する。
無限大の 0 以外の有限数による除算の結果は、符号付き無限大である。符合は上にあけた規則で決定する。
有限数の無限大による除算の結果は、 0 である。符合は上にあけた規則で決定する。
0 の 0 による除算の結果は、 NaN である; 0 の任意の他の有限数による除算の結果は 0 である。符合は上にあけた規則で決定する。
0 以外の有限数の 0 よる除算の結果は、符号付き無限大である。符合は上にあけた規則で決定する。
無限大でも 0 でも NaN でもない残りのケースでは、商が算出され、 IEEE 754 直近への丸めモードを使用して、直近の表現可能な値へ丸められる。大きさが表せないほど大きいならば、演算はオーバーフローし結果は適切な符合の無限大となる。大きさが表せないほど小さいらば、演算はアンダーフローし結果は適切な符合の 0 となる。 ECMAScript 言語は、 IEEE 754 に定義される段階的アンダーフロー (gradual underflow) のサポートを必須とする。
11.5.3 % 演算子の適用 (Applying the % Operator)

% 演算子は、言外の除算から項の剰余を算出する; 左項が被除数で右項が除数である。
NOTE C および C++ において、剰余演算子は整数項のみを受け付ける; ECMAScript においては、浮動小数点数項も受け付ける。
% 演算子により算出されるような浮動小数点数の剰余演算の結果は、 IEEE 754 で定義される "reminder" 演算と同様ではない。 IEEE 754 "remainder" 演算は、切り捨て除算 (truncating division) からではなく丸め除算 (rounding division) から剰余を算出し、したがってその振る舞いは有用な整数剰余演算子のそれとは類似しない。代わりに ECMAScript 言語は % を浮動小数点数演算上で定義し、 Java 整数剰余演算子のそれに類似する方法で振る舞う; これは C ライブラリ関数 fmod と比較される.
ECMAScript 浮動小数点数剰余演算の結果は、 IEEE 算術の規則で決定される:
どちらかの項が NaN ならば、結果は NaN である。
結果の符号は、被除数の符号と等しい。
被除数が無限大、または除数が 0 、 あるいはその両方ならば、 結果は NaN である。
被除数が有限数 かつ 除数が無限大ならば、結果は被除数と等しい。
被除数が 0 かつ 除数が有限数ならば、結果は被除数と同じである。
無限大でも 0 でも NaN でもない残りのケースでは、被除数 n と除数 d から浮動小数点数の剰余 r は、数学的関係 r = n - ( d * q ) によって定義される。 q は整数で n/d が負なら負、正ならば正であり、大きさは n と d の真の数学的な商の大きさを超えない可能な限り大きい。
「js-grammer03」をウィキ内検索
LINE
シェア
Tweet
0x0b
記事メニュー
  • トップページ

  • JavaScript(ECMAscript)
  • CSS
  • SGML/HTML/XML

テスト用
  • 砂場
見本
  • 使用頻度の高い構文


メモ
_travian
_


ここを編集




延べ - 回
今日 - 回
昨日 - 回



記事メニュー2
2025-09-08 08:39:13 (Mon)

更新履歴

取得中です。



@wikiヘルプメニュー
  • @wiki助け合いコミュニティ
  • wiki(ウィキ)って何?
  • 初心者ガイド
  • ご利用ガイド
  • 良くある質問
  • プラグイン一覧
  • 編集モードの違いについて
  • 不具合や障害を見つけたら
  • 管理・設定マニュアル




ここを編集
最近更新されたページ
  • 4126日前

    トップページ
  • 5093日前

    js_ref
  • 5100日前

    js_about_08
  • 5100日前

    js_about_07
  • 5100日前

    js_about_06
  • 5100日前

    js_about_05
  • 5100日前

    js_about_04
  • 5101日前

    js_about_03
  • 5104日前

    js_about_02
  • 5104日前

    js_about_01
もっと見る
最近更新されたページ
  • 4126日前

    トップページ
  • 5093日前

    js_ref
  • 5100日前

    js_about_08
  • 5100日前

    js_about_07
  • 5100日前

    js_about_06
  • 5100日前

    js_about_05
  • 5100日前

    js_about_04
  • 5101日前

    js_about_03
  • 5104日前

    js_about_02
  • 5104日前

    js_about_01
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. モンスター烈伝オレカバトル2@wiki
  2. Dance Dance Revolution SP総合wiki
  3. テイルズ オブ ヴェスペリア 2ch まとめ @Wiki
  4. モンスターファーム2@まとめwiki
  5. テイルズ オブ グレイセス f まとめWiki
  6. Dragon Marked For Death攻略Wiki
  7. ポケモン 作品なりきりネタWiki
  8. アサルトリリィ wiki
  9. Abiotic Factor 日本語攻略Wiki
  10. パタポン2 ドンチャカ♪@うぃき
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  7. 発車メロディーwiki
  8. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. まどドラ攻略wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. シュガードール情報まとめウィキ
  4. SurrounDead 攻略 (非公式wiki)
  5. ちいぽけ攻略
  6. Dark War Survival攻略
  7. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  8. カツドンチャンネル @ Wiki
  9. AviUtl2のWiki
  10. 魔法少女ノ魔女裁判 攻略・考察Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  3. 天羽 まろん - ストグラ まとめ @ウィキ
  4. 天羽 みかげ - ストグラ まとめ @ウィキ
  5. ミッション攻略 - 地球防衛軍6 @ ウィキ
  6. 稼ぎ - 地球防衛軍6 @ ウィキ
  7. ヤソップ(ONE PIECE) - アニヲタWiki(仮)
  8. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  9. 雨宮(amemiya0123) - ダイナマイト野球3D
  10. 千鳥の鬼レンチャン 挑戦者一覧 - 千鳥の鬼レンチャン サビだけカラオケデータベース
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.