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

0x0b

js_expression&statement

最終更新:2011年08月31日 14:18

0x0b

- view
管理者のみ編集可

式(Expression)

基本式(Primary)

Syntax

PrimaryExpression :
this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )

this キーワード (this Keyword)

this キーワードは実行コンテキストの this 値を評価する。

識別子参照(Identifier Reference)

識別子は、(実行コンテキスト スコープ連鎖と識別子の解決)で述べたスコープ規則を使用して評価される。この識別子評価の結果は常に Reference 型の値である。

リテラル参照

リテラルは(字句について リテラル)に述べるように評価される。

Array 初期化子

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) を返す。

オブジェクト初期化子

オブジェクト初期化子は 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)) を返す。

グループ化演算子

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


文(Statement)

Syntax

Statement :
Block
VariableStatement
EmptyStatement
ExpressionStatement
IfStatement
IterationStatement
ContinueStatement
BreakStatement
ReturnStatement
WithStatement
LabelledStatement
SwitchStatement
ThrowStatement
TryStatement

Semantics
Statement は LabelledStatement の一部となりうるし、それ自身が LabelledStatement の一部であってもよく、以下同様である。この方法でつけられたラベルは、個々の文の意味論記述において "現在のラベルセット (current label set)" として併せて参照される。 LabelledStatement はラベルセットへのラベルの導入以外の意味論を持たない。 IterationStatement または SwitchStatement のラベルセットは最初は単一の要素 empty で構成される。任意の他の文のラベルセットは初期は empty である。

ブロック (Block)

Syntax

Block :
{ StatementListopt }
StatementList :
Statement
StatementList Statement
Semantics
生成規則 Block : { } は、次のように評価される:
(normal, empty, empty) を返す。
生成規則 Block : { StatementList } は、次のように評価される:
StatementList を評価。
Result(1) を返す。
生成規則 StatementList : Statement は、次のように評価される:
Statement を評価。
例外が投げられたら、(throw, V, empty) を返す。 V は例外である。 (ここでは例外が返されないかのように実行は進行する。)
Result(1) を返す。
生成規則 StatementList : StatementList Statement は、次のように評価される:
StatementList を評価。
Result(1) が中途完了であれば、 Result(1) を返す。
Statement を評価。
例外が投げられたら、(throw, V, empty) を返す。 V は例外である。 (ここでは例外が返されないかのように実行は進行する。)
Result(3).value が empty であれば、 V = Result(1).value とし、そうでなければ V = Result(3).value とする。
(Result(3).type, V, Result(3).target) を返す。

変数文

Syntax

VariableStatement :
var VariableDeclarationList ;
VariableDeclarationList :
VariableDeclaration
VariableDeclarationList , VariableDeclaration
VariableDeclarationListNoIn :
VariableDeclarationNoIn
VariableDeclarationListNoIn , VariableDeclarationNoIn
VariableDeclaration :
Identifier Initialiseropt
VariableDeclarationNoIn :
Identifier InitialiserNoInopt
Initialiser :
= AssignmentExpression
InitialiserNoIn :
= AssignmentExpressionNoIn
Description
FunctionDeclaration 内部で変数文が発生するならば、その変数は、(実行コンテキスト 変数の実体化)にあるように、その関数内の関数ローカルスコープで定義される。そうでないならば、それらはプロパティ属性 { DontDelete } のグローバルスコープで定義される(つまり、(実行コンテキスト 変数の実体化)にあるグローバルオブジェクトのメンバとして作成される)。変数は実行スコープに入ったときに生成される。 Block は新しい実行スコープを定義しない。 Program と FunctionDeclaration だけが新しいスコープを生成する。生成時、変数は undefined で初期化される。イニシャライザを持つ変数が AssignmentExpression の値を代入されるのは VariableStatement が実行されるときであり、変数が生成されたときではない。
Semantics
生成規則 VariableStatement : var VariableDeclarationList ; は、次のように評価される:
VariableDeclarationList を評価。
(normal, empty, empty) を返す。
生成規則 VariableDeclarationList : VariableDeclaration は、次のように評価される:
VariableDeclaration を評価。
生成規則 VariableDeclarationList : VariableDeclarationList , VariableDeclaration は、次のように評価される:
VariableDeclarationList を評価。
VariableDeclaration を評価。
生成規則 VariableDeclaration : Identifier は、次のように評価される:
Identifier と同じ文字シーケンスで構成される文字列値を返す。
生成規則 VariableDeclaration : Identifier Initialiser は、次のように評価される:
(文 識別子参照)にあるように Identifier を評価。
Initialiser を評価。
GetValue(Result(2)) を呼出す。
PutValue(Result(1), Result(3)) を呼出す。
Identifier と同じ文字シーケンスで構成される文字列値を返す。
生成規則 Initialiser : = AssignmentExpression は、次のように評価される:
AssignmentExpression を評価。
Result(1) を返す。
生成規則 VariableDeclarationListNoIn, VariableDeclarationNoIn, InitialiserNoIn は、生成規則 VariableDeclarationList, VariableDeclaration, Initialiser と同様に評価されるが、 VariableDeclarationList, VariableDeclaration, Initialiser, AssignmentExpression の代わりに、それぞれ VariableDeclarationListNoIn, VariableDeclarationNoIn, InitialiserNoIn, AssignmentExpressionNoIn が評価される。

空文

Syntax

EmptyStatement :
;
Semantics
生成規則 EmptyStatement : ; は、次のように評価される:
(normal, empty, empty) を返す。

式文

Syntax

ExpressionStatement :
[lookahead ∉ {{, function} ] Expression ;
Block と曖昧になることから、 ExpressionStatement は大括弧 "{" で開始することはできないことに注意。また、 FunctionDeclaration と曖昧になることから、 ExpressionStatement は function キーワードで開始することもできない。
Semantics
生成規則 ExpressionStatement : [lookahead ∉ {{, function}] Expression ; は、次のように評価される:
Expression を評価する。
GetValue(Result(1)) を呼出す。
(normal, Result(2), empty) を返す。

if 文

*

Syntax
IfStatement :
if ( Expression ) Statement else Statement
if ( Expression ) Statement
関連する if の選択が曖昧な else は、可能な限り最も近い、関連しなければ該当する else がないような if にそれぞれ関連している。
Semantics
生成規則 IfStatement : if ( Expression ) Statement else Statement は、次のように評価される:
Expression を評価。
GetValue(Result(1)) を呼出す。
ToBoolean(Result(2)) を呼出す。
Result(3) が false ならば、ステップ 7 へ。
最初の Statement を評価。
Result(5) を返す。
2 番目の Statement を評価。
Result(7) を返す。
生成規則 IfStatement : if ( Expression ) Statement は、次のように評価される:
Expression を評価。
GetValue(Result(1)) を呼出す。
ToBoolean(Result(2)) を呼出す。
Result(3) が false ならば、 (normal, empty, empty) を返す。
Result(3) が false ならば、 (normal, empty, empty) を返す。
Statement を評価。
Result(5) を返す。

繰返し文(Iteration)

繰返し文は (キーワードと括弧の制御構造で構成される) ヘッダと (Statement で構成される) 本文で構成される。

Syntax

IterationStatement :
do Statement while ( Expression );
while ( Expression ) Statement
for (ExpressionNoInopt; Expressionopt ; Expressionopt ) Statement
for ( var VariableDeclarationListNoIn; Expressionopt ; Expressionopt ) Statement
for ( LeftHandSideExpression in Expression ) Statement
for ( var VariableDeclarationNoIn in Expression ) Statement

do-while文

生成規則 do Statement while ( Expression ); は、次のように評価される:
V = empty とする。
Statement を評価。
Result(2).value が empty でなければ、 V = Result(2).value とする。
Result(2).type が continue で、かつ Result(2).target が現在のラベルセット内にあれば、ステップ 7 へ。
Result(2).type が break で、かつ Result(2).target が現在のラベルセット内にあれば、 (normal, V, empty) を返す。
Result(2) が中途完了ならば、 Result(2) を返す。
Expression を評価。
GetValue(Result(7)) を呼出す。
ToBoolean(Result(8)) を呼出す。
Result(9) が true ならば、ステップ 2 ヘ。
(normal, V, empty) を返す。

while 文

生成規則 IterationStatement : while ( Expression ) Statement は、次のように評価される:
V = empty とする。
Expression を評価。
GetValue(Result(2)) を呼出す。
ToBoolean(Result(3)) を呼出す。
Result(4) が false ならば、 (normal, V, empty) を返す。
Statement を評価。
Result(6).value が empty でなければ、 V = Result(6).value とする。
Result(6).type が continue かつ Result(6).target が現在のラベルセットならば、ステップ 2 へ。
Result(6).type が break かつ Result(6).target が現在のラベルセットならば、 (normal, V, empty) を返す。
Result(6) が中途完了ならば、 Result(6) を返す。
ステップ 2 へ。

for 文

生成規則 IterationStatement : for (ExpressionNoInopt ; Expressionopt ; Expressionopt) Statement は、次のように評価される:
ExpressionNoIn が存在しなければ、ステップ 4 へ。
ExpressionNoIn を評価。
GetValue(Result(2)) を呼出す。 (この値は使用しない。)
V = empty とする。
最初の Expression が存在しなければ、ステップ 10 へ。
最初の Expression を評価。
GetValue(Result(6)) を呼出す。
ToBoolean(Result(7)) を呼出す。
Result(8) が false ならば、ステップ 19 へ。
Statement を評価。
Result(10).value が empty でないならば、 V = Result(10).value とする。
Result(10).type が break かつ Result(10).target が現在のラベルセットならば、ステップ 19 へ。
Result(10).type が continue かつ Result(10).target が現在のラベルセットならば、ステップ 15 へ。
Result(10) が中途完了ならば Result(10) を返す。
2 番目の Expression が存在しなければ、ステップ 5 へ。
2 番目の Expression を評価。
GetValue(Result(16) を呼出す。 (この値は使用しない。)
ステップ 5 へ。
(normal, V, empty) を返す。
生成規則 IterationStatement : for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement は、次のように評価される:
VariableDeclarationListNoIn を評価。
V = empty とする。
1 個目の Expression が存在しないならば、 ステップ 8 へ。
1 個目の Expression を評価。
GetValue(Result(4)) を呼出す。
ToBoolean(Result(5)) を呼出す。
Result(6) が false ならば、 ステップ 17 へ。
Statement を評価。
Result(8).value が空でないならば、 V = Result(8).value とする。
Result(8).type が break かつ Result(8).target が現在のラベルセット内ならば、 ステップ 17 へ。
Result(8).type が continue かつ Result(8).target が現在のラベルセット内ならば、 ステップ 13 へ。
Result(8) が中途完了ならば、 Result(8) を返す。
2 個目の Expression が存在しないならば、 ステップ 3 へ。
2 個目の Expression を評価。
GetValue(Result(14)) を呼出す。 (この値は使用しない。)
ステップ 3 へ。
(normal, V, empty) を返す。

for-in 文

生成規則 IterationStatement : for ( LeftHandSideExpression in Expression ) Statement は、次のように評価される:
Expression を評価。
GetValue(Result(1)) を呼出す。
ToObject(Result(2)) を呼出す。
V = empty とする。
DontEnum 属性を持たない、 Result(3) の次のプロパティの名前を取得する。そのようなプロパティが存在しないならば、 ステップ 14 へ。
LeftHandSideExpression を評価 (これは繰返し評価されてよい)。
PutValue(Result(6), Result(5)) を呼出す。
Statement を評価。
Result(8).value が empty でないならば、 V = Result(8).value とする。
Result(8).type が break かつ Result(8).target が現在のラベルセット内ならば、 ステップ 14 へ。
Result(8).type が continue かつ Result(8).target が現在のラベルセット内ならば、 ステップ 5 へ。
Result(8) が中途完了ならば、 Result(8) を返す。
ステップ 5 へ。
(normal, V, empty) を返す。
生成規則 IterationStatement : for ( var VariableDeclarationNoIn in Expression ) Statement は、次のように評価される:
VariableDeclarationNoIn を評価。
Expression を評価。
GetValue(Result(2)) を呼出す。
ToObject(Result(3)) を呼出す。
V = empty とする。
DontEnum 属性を持たない、 Result(4) の次のプロパティを取得する。そのようなプロパティが存在しないならば、ステップ 15 へ。
それが Identifier であるかのように Result(1) を評価; 11.1.2 参照(これは繰返し評価されてよい).
PutValue(Result(7), Result(6)) を呼出す。
Statement を評価。
Result(9).value が empty でないならば、 V = Result(9).value とする。
Result(9).type が break かつ Result(9).target が現在のラベルセット内ならば、 ステップ 15 へ。
Result(9).type が continue かつ Result(9).target が現在のラベルセット内ならば、 ステップ 6 へ。
Result(8) が中途完了ならば、 Result(8) を返す。
ステップ 6 へ。
(normal, V, empty) を返す。
プロパティの列挙方法 (1 個目のアルゴリズムのステップ 5, 2 個目のステップ 6) は実装依存である。列挙の順序はオブジェクトにより定義される。列挙されているオブジェクトのプロパティは列挙中に削除されてもよい。列挙中まだ挙げられていないプロパティが削除されるならば、そのプロパティは列挙されない。列挙中オブジェクトに新しいプロパティが追加されるならば、新たに追加されたプロパティは現在の列挙において挙げられることを保証されない。
オブジェクトのプロパティ列挙は、そのプロトタイプのプロパティ、プロトタイプのプロトタイプのプロパティ、以下同様に再帰的にプロパティを含む; しかし、同名のプロパティを持つプロトタイプチェーン内の前のオブジェクトにより "隠される" ならば、プロトタイプのプロパティは列挙されない。

continue 文

Syntax

ContinueStatement :
continue [LineTerminator 無し] Identifieropt ;
Semantics
次のいずれかが真であるとき、プログラムは構文的に不正であると考えられる:
プログラムが選択的 Identifier を持たない continue 宣言で構成されていて、直接または間接的に(関数の区切りにまたがらない)、 IterationStatement 内にネストしなていない。
プログラムが選択的 Identifier を持つ continue 宣言で構成されていて、閉じた (関数の区切りにはまたがらない) IterationStatement のラベルセット内に Identifier が出現しない
Identifier のない ContinueStatement は、次のように評価される:
(continue, empty, empty) を返す。
Identifier を持つ ContinueStatement は、次のように評価される:
(continue, empty, Identifier) を返す。

break 文

Syntax

BreakStatement :
break [LineTerminator 無し] Identifieropt ;
Semantics
次のいずれかが真である場合、プログラムは構文的に不正であると考えられる:
プログラムが選択的な Identifier を持たない break 文を含み、それが IterationStatement または SwitchStatement 内部で直接的または間接的にネストしていない。 (関数の境界には交わらない)
プログラムが選択的な Identifier を持つ break 文を含み、 Identifier が Statement を囲むラベルセット内に出現しない。 (関数の境界には交わらない)
Identifier のない BreakStatement は、次のように評価される:
(break, empty, empty) を返す。
Identifier のある BreakStatement は、次のように評価される:
(break, empty, Identifier) を返す。

return 文

Syntax

ReturnStatement :
return [LineTerminator 無し] Expressionopt ;
Semantics
ECMAScript プログラムは、それが FunctionBody 内部\でない return 文を含む場合、構文的に不正と考えられる。return 文は、関数に実行を停止させ、値を呼出側に返させる。 Expression が省略される場合、戻り値は undefined である。そうでなければ、戻り値は Expression の値である。
生成規則 ReturnStatement : return [no LineTerminator here] Expressionopt ; は、次のように評価される:
Expression が存在しなければ (return, undefined, empty) を返す。
Expression を評価。
GetValue(Result(2)) を呼出す。
(return, Result(3), empty) を返す。

with 文

Syntax

WithStatement :
with ( Expression ) Statement
Description
with 文は現在の実行コンテキストのスコープ連鎖の先頭に算出されたオブジェクトを追加し、この拡張されたスコープ連鎖を用いて文を実行し、スコープ連鎖を蓄積する。
Semantics
生成規則 WithStatement : with ( Expression ) Statement は、次のように評価される:
Expression を評価。
GetValue(Result(1)) を呼出す。
ToObject(Result(2)) を呼出す。
スコープ連鎖の先頭に Result(3) を追加。
ステップ 4 から拡張されるスコープ連鎖を使用して Statement を評価。
C を Result(5) とする。ステップ 5 で例外が投げられたら、 C を (throw, V, empty) とする。 V のところは例外である。(実行は例外が発生しなかったかのように進行する。)
スコープ連鎖の先頭から Result(3) を取り除く。
C を返す。
NOTE 埋め込まれた Statement にどのように制御が残ったとしても、通常でろうと中途完了や例外の形式であろうと、スコープチェーンには常に依然の状態が蓄積される。

switch 文

Syntax

SwitchStatement :
switch ( Expression ) CaseBlock
CaseBlock :
{ CaseClausesopt }
{ CaseClausesopt DefaultClause CaseClausesopt }
CaseClauses :
CaseClause
CaseClauses CaseClause
CaseClause :
case Expression : StatementListopt
DefaultClause :
default : StatementListopt
Semantics
生成規則 SwitchStatement : switch ( Expression ) CaseBlock は、次のように評価される:
Expression を評価。
GetValue(Result(1)) を呼出す。
CaseBlock を評価し、パラメータとして Result(2) を渡す。
Result(3).type が break で Result(3).target が現在のラベルセットならば、 (normal, Result(3).value, empty) を返す。
Result(3) を返す。
生成規則 CaseBlock : { CaseClausesopt } は入力パラメータ input を与えられ、次のように評価される:
V = empty とする。
A をソーステキスト順の CaseClause 項目のリストとする。
C を A 内の次の CaseClause とする。そのような CaseClause がなければ、ステップ 16 へ。
C を評価する。
input が !-- 演算子で定義されるように等しくなければ、 ステップ 3 へ。
C が StatementList を持たなければ、ステップ 10 へ。
C の StatementList を評価し、 R をその結果とする。
R が中途完了ならば、 R を返す。
V = R.value とする。
C を A 内の次の CaseClause とする。そのような CaseClause がなければ、ステップ 16 へ。
C が StatementList を持たなければ、ステップ 10 へ。
C の StatementList を評価し、 R をその結果とする。
R.value が empty でなければ、 V = R.value とする。
R が中途完了ならば、 (R.type, V, R.target) を返す。
ステップ 10 へ。
(normal, V, empty) を返す。
生成規則 CaseBlock : { CaseClausesopt DefaultClause CaseClausesopt } は入力パらメータ input を与えられ、次のように評価される:
V = empty とする。
A を 1 個目の CaseCloses 内のソーステキスト順の CaseClause 項目のリストとする。
C を A 内の次の CaseClause とする。そのような CaseClause がなければ、ステップ 11 へ。
C を評価する。
input が Result(4) と !== 演算子により定義されるように等しくなければ、ステップ 3 へ。
C が StatementList を持たなければ、ステップ 20 へ。
C の StatementList を評価し、 R をその結果とする。
R が中途完了ならば、 R を返す。
V = R.value とする。
ステップ 20 へ。
B を 2 個目の CaseClauses 内のソーステキスト順の CaseClause 項目のリストとする。
C を B 内の次の CaseClause とする。そのような CaseClause がなければ、ステップ 26 へ。
C を評価する。
input が Result(13) と !== 演算子により定義されるように等しくなければ、ステップ 12 へ。
C が StatementList を持たなければステップ 31 へ。
C の StatementList を評価し、 R を結果とする。
R が中途完了ならば R を返す。
V = R.value とする。
ステップ 31 へ。
C を A 内の次の CaseClause とする。そのような CaseClause がなければ、ステップ 26 へ。
C が StatementList を持たなければ、ステップ 20 へ。
C の StatementList を評価し、 R をその結果とする。
R.value が empty でなければ、 V = R.value とする。
R が中途完了ならば、 (R.type, V, R.target) を返す。
ステップ 20 へ。
DefaultClause が StatementList を持たなければ、ステップ 30 へ。
DefaultClause の StatementList を評価し、 R をその結果とする。
R.value が empty でなければ、 V = R.value とする。
R が中途完了ならば、 (R.type, V, R.target) を返す。
B を 2 個目の CaseClauses 内のソーステキスト順の CaseClause 項目のリストとする。
C を B 内の次の CaseClause とする。そのような CaseClause がなければ、ステップ 37 へ。
C が StatementList を持たないならば、ステップ 31 へ。
C の StatementList を評価し、 R をその結果とする。
R.value が empty でないならば、 V = R.value とする。
R が中途完了ならば、 (R.type, V, R.target) を返す。
ステップ 31 へ。
(normal, V, empty) を返す。
生成規則 CaseClause : case Expression : StatementListopt は、次のように評価される:
Expression を評価。
GetValue(Result(1)) を呼出す。
Result(2) を返す。
NOTE CaseClause 評価は関連 StatementList を実行しない。単純に Expression を評価し、 StatementList 実行開始判定に CaseBlock アルゴリズムが用いる値を返す。

ラベル付き文

Syntax

LabelledStatement :
Identifier : Statement
Semantics
Statement にラベルを先行させてよい。ラベル付き文は、ラベル付き break 及び continue 文とともに使用されるだけである。 ECMAScript は goto 文を持たない。
ECMAScript プログラムは、 LabelledStatement によってラベルと同じ Identifier で閉じられている LabelledStatement を含む場合、構文的に不正であると考えられる。これは、ラベル付けされた文中でネストされる FunctionDeclaration の本文内に直接あるいは間接的に現われるラベルには当てはまらない。
生成規則 Identifier : Statement は、 Statement のラベルセットに Identifier を追加する形で評価され、 Statement を評価する。 LabelledStatement 自身が空でないラベルセットを持つならば、それらのラベルはまたそれが評価される前に Statement のラベルセットに追加される。 L を Identifier と等しいとして Statement 評価の結果が (break, V, L) ならば、生成規則は (normal, V, empty) を結果とする。
LabelledStatement の評価に先立って、含まれる Statement は空のラベルセットを所有すると見なされるが、それが IterationStatement あるいは SwitchStatement ならば、その場合それは単一の要素 empty からなるラベルセットを所有すると見なされる。

throw 文

Syntax

ThrowStatement :
throw [LineTerminator 無し] Expression ;
Semantics
生成規則 ThrowStatement : throw [no LineTerminator here] Expression ; は、次のように評価される:
Expression を評価。
GetValue(Result(1)) を呼出す。
(throw, Result(2), empty) を返す。

try 文

Syntax

TryStatement :
try Block Catch
try Block Finally
try Block Catch Finally
Catch :
catch (Identifier ) Block
Finally :
finally Block
Description
try 文は、実行時エラーや throw 文のような例外的条件が発生するコードのブロックを囲む。 catch クローズは例外にハンドリングされるコードを提供する。 catch クローズが例外を受け取るとき、その Identifier は発生した例外にバインドされる。
Semantics
生成規則 TryStatement : try Block Catch は、次のように評価される:
Block を評価。
Result(1).type が throw でなければ、 Result(1) を返す。
パラメータ に Result(1) を以って Catch を評価。
Result(3) を返す。
生成規則 TryStatement : try Block Finally は、次のように評価される:
Block を評価。
Finally を評価。
Result(2).type が normal ならば、 Result(1) を返す。
Result(2) を返す。
生成規則 TryStatement : try Block Catch Finally は、次のように評価される:
Block を評価。
C = Result(1) とする。
Result(1).type が throw でなければ、ステップ 6 へ。
パラメータ に Result(1) を以って Catch を評価。
C = Result(4) とする。
Finally を評価。
Result(6).type が normal ならば、 C を返す。
Result(6) を返す。
生成規則 Catch : catch ( Identifier ) Block は、次のように評価される:
C をこの生成規則に渡されているパラメータとする。
式 new Object() によるものであるかのように、新しいオブジェクトを生成する。
Result(2) にプロパティを作成する。プロパティ名は Identifier, 値は C.value, 属性は { DontDelete } である。
スコープ連鎖の先頭に Result(2) を追加。
Block を評価。
スコープ連鎖の先頭から Result(2) を取り除く。
Result(5) を返す。
生成規則 Finally : finally Block は、次のように評価される:
Block を評価。
Result(1) を返す。
「js_expression&statement」をウィキ内検索
LINE
シェア
Tweet
0x0b
記事メニュー
  • トップページ

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

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


メモ
_travian
_


ここを編集




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



記事メニュー2
2025-09-08 08:32:02 (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.