左值表達(dá)式

2018-06-16 15:18 更新

語(yǔ)法:

MemberExpression : PrimaryExpression FunctionExpression MemberExpression [ Expression ] MemberExpression . IdentifierName new MemberExpression ArgumentsNewExpression : MemberExpression new NewExpressionCallExpression : MemberExpression Arguments CallExpression Arguments CallExpression [ Expression ] CallExpression . IdentifierNameArguments : ( ) ( ArgumentList )ArgumentList : AssignmentExpression ArgumentList , AssignmentExpressionLeftHandSideExpression : NewExpression CallExpression

屬性訪問(wèn)

 屬性是通過(guò) name 來(lái)訪問(wèn)的,可以使用點(diǎn)表示法訪問(wèn)

MemberExpression . IdentifierName CallExpression . IdentifierName

 或者括號(hào)表示法訪問(wèn)

MemberExpression [ Expression ] CallExpression [ Expression ]

 點(diǎn)表示法是根據(jù)以下的語(yǔ)法轉(zhuǎn)換解釋

MemberExpression . IdentifierName

 這會(huì)等同于下面這個(gè)行為

MemberExpression [ <identifier-name-string> ]

 類(lèi)似地,

CallExpression . IdentifierName

 是等同于下面的行為

CallExpression [ <identifier-name-string> ]

 是一個(gè)字符串字面量,它與 Unicode 編碼后的 IdentifierName 包含相同的字符序列。

 產(chǎn)生式 MemberExpression : MemberExpression [ Expression ] is evaluated as follows:

  1. 令 baseReference 為解釋執(zhí)行 MemberExpression 的結(jié)果 .
  2. 令 baseValue 為 GetValue(baseReference).
  3. 令 propertyNameReference 為解釋執(zhí)行 Expression 的結(jié)果 .
  4. 令 propertyNameValue 為 GetValue(propertyNameReference).
  5. 調(diào)用 CheckObjectCoercible(baseValue).
  6. 令 propertyNameString 為 ToString(propertyNameValue).
  7. 如果正在執(zhí)行中的語(yǔ)法產(chǎn)生式包含在嚴(yán)格模式代碼當(dāng)中,令 strict 為 true, 否則令 strict 為 false.
  8. 返回一個(gè)值類(lèi)型的引用,其基值為 baseValue 且其引用名為 propertyNameString, 嚴(yán)格模式標(biāo)記為 strict.

 產(chǎn)生式CallExpression : CallExpression [ Expression ] 以完全相同的方式執(zhí)行,除了第1步執(zhí)行的是其中的CallExpression。

new 運(yùn)算符

 產(chǎn)生式 NewExpression : new NewExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 ref 為解釋執(zhí)行 NewExpression 的結(jié)果 .
  2. 令 constructor 為 GetValue(ref).
  3. 如果 Type(constructor) is not Object ,拋出一個(gè) TypeError 異常 .
  4. 如果 constructor 沒(méi)有實(shí)現(xiàn) [[Construct]] 內(nèi)置方法 ,拋出一個(gè) TypeError 異常 .
  5. 返回調(diào)用 constructor 的 [[Construct]] 內(nèi)置方法的結(jié)果 , 傳入按無(wú)參數(shù)傳入?yún)?shù)列表 ( 就是一個(gè)空的參數(shù)列表 ).

 產(chǎn)生式 MemberExpression : new MemberExpression Arguments 按照下面的過(guò)程執(zhí)行 :

  1. 令 ref 為解釋執(zhí)行 MemberExpression 的結(jié)果 .
  2. 令 constructor 為 GetValue(ref).
  3. 令 argList 為解釋執(zhí)行 Arguments 的結(jié)果 , 產(chǎn)生一個(gè)由參數(shù)值構(gòu)成的內(nèi)部列表類(lèi)型 (11.2.4).
  4. 如果 Type(constructor) is not Object ,拋出一個(gè) TypeError 異常 .
  5. 如果 constructor 沒(méi)有實(shí)現(xiàn) [[Construct]] 內(nèi)置方法,拋出一個(gè) TypeError 異常 .
  6. 返回以 argList 為參數(shù)調(diào)用 constructor 的 [[Construct]] 內(nèi)置方法的結(jié)果。

函數(shù)調(diào)用

 產(chǎn)生式 CallExpression : MemberExpression Arguments 按照下面的過(guò)程執(zhí)行 :

  1. 令 ref 為解釋執(zhí)行 MemberExpression 的結(jié)果 .
  2. 令 func 為 GetValue(ref).
  3. 令 argList 為解釋執(zhí)行 Arguments 的結(jié)果 , 產(chǎn)生參數(shù)值們的內(nèi)部列表 (see 11.2.4).
  4. 如果 Type(func) is not Object ,拋出一個(gè) TypeError 異常 .
  5. 如果 IsCallable(func) is false ,拋出一個(gè) TypeError 異常 .
  6. 如果 Type(ref) 為 Reference,那么 如果 IsPropertyReference(ref) 為 true,那么 令 thisValue 為 GetBase(ref). 否則 , ref 的基值是一個(gè)環(huán)境記錄項(xiàng) 令 thisValue 為調(diào)用 GetBase(ref) 的 ImplicitThisValue 具體方法的結(jié)果
  7. 否則 , 假如 Type(ref) 不是 Reference. 令 thisValue 為 undefined.
  8. 返回調(diào)用 func 的 [[Call]] 內(nèi)置方法的結(jié)果 , 傳入 thisValue 作為 this 值和列表 argList 作為參數(shù)列表

 產(chǎn)生式 CallExpression : CallExpression Arguments以完全相同的方式執(zhí)行,除了第1步執(zhí)行的是其中的CallExpression。

 假如func是一個(gè)原生的ECMAScript對(duì)象,返回的結(jié)果永遠(yuǎn)不會(huì)是Reference類(lèi)型,調(diào)用一個(gè)宿主對(duì)象是否返回一個(gè)Reference類(lèi)型的值由實(shí)現(xiàn)決定。 若一Reference值返回,則它必須是一個(gè)非嚴(yán)格的屬性引用。

參數(shù)列表

 The evaluation of an argument list produces a List of values (see 8.8).

 產(chǎn)生式 Arguments : ( ) 按照下面的過(guò)程執(zhí)行 :

  1. 返回一個(gè)空列表 .

 產(chǎn)生式 Arguments : ( ArgumentList ) 按照下面的過(guò)程執(zhí)行 :

  1. 返回解釋執(zhí)行 ArgumentList 的結(jié)果 .

 產(chǎn)生式 ArgumentList ':' AssignmentExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 ref 為解釋執(zhí)行 AssignmentExpression 的結(jié)果 .
  2. 令 arg 為 GetValue(ref).
  3. 返回 a List whose sole item is arg.

 產(chǎn)生式 ArgumentList :'''' ArgumentList , AssignmentExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 precedingArgs 為解釋執(zhí)行 ArgumentList 的結(jié)果 .
  2. 令 ref 為解釋執(zhí)行 AssignmentExpression 的結(jié)果 .
  3. 令 arg 為 GetValue(ref).
  4. 返回一個(gè)列表,長(zhǎng)度比 precedingArgs 大 1 且 它的 items 為 precedingArgs 的 items, 按順序在后面跟 arg,arg 是這個(gè)新的列表的最后一個(gè) item.

函數(shù)表達(dá)式

 產(chǎn)生式 MemberExpression : FunctionExpression 按照下面的過(guò)程執(zhí)行 :

  1. 返回解釋執(zhí)行 FunctionExpression 的結(jié)果 .


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)