簡體   English   中英

ECMA-262 7.0 GetValue(V)

[英]ECMA-262 7.0 GetValue(V)

誰能用例子向我解釋這個算法是如何工作的?

GetValue (V)#

1. ReturnIfAbrupt(V).
2. If Type(V) is not Reference, return V. 
3. Let base be GetBase(V). 
4. If IsUnresolvableReference(V) is true, throw a ReferenceError exception. 
5. If IsPropertyReference(V) is true, then  
    a. If HasPrimitiveBase(V) is true, then  
        i. Assert: In this case, base will never be null or undefined.  
        ii. Let base be ToObject(base).  
    b. Return ? base.[[Get]](GetReferencedName(V), GetThisValue(V)). 
6. Else base must be an Environment Record,  
    a. Return ? base.GetBindingValue(GetReferencedName(V), IsStrictReference(V)) (see 8.1.1).

http://www.ecma-international.org/ecma-262/7.0/#sec-getvalue

如果有人用例子解釋它是如何工作的,那就太好了。 我試過了,但我不太了解。

解釋示例:

let a = 10, b = {name: "Unknown"};
(null, a);
(null, a.name);
(null, b);
(null, b.name);
(null, b.surname);
(null, 10);
/// etc...

此細分提供更多背景信息:

...參考規格類型#

注意引用類型用於解釋諸如delete,typeof,賦值運算符,super關鍵字和其他語言特性之類的運算符的行為。 例如,期望賦值的左側操作數生成引用。

Reference是已解析的名稱或屬性綁定。 Reference由三個組件組成,基值,引用名稱和布爾值嚴格引用標志。 基值可以是undefined,Object,Boolean,String,Symbol,Number或Environment Record。 基本值undefined表示無法將Reference解析為綁定。 引用的名稱是String或Symbol值。

超級引用是一個引用,用於表示使用super關鍵字表示的名稱綁定。 超級引用具有附加的thisValue組件,其基值永遠不會是環境記錄。

本規范中使用以下抽象操作來訪問引用的組件:

  • GetBase(V)。 返回引用V的基值組件。
  • GetReferencedName(V)。 返回引用V的引用名稱組件。
  • IsStrictReference(V)。 返回引用V的嚴格引用標志組件。
  • HasPrimitiveBase(V)。 如果Type(base)是Boolean,String,Symbol或Number,則返回true。
  • IsPropertyReference(V)。 如果基值是對象或HasPrimitiveBase(V)為true,則返回true;否則返回true。 否則返回false。
  • IsUnresolvableReference(V)。 如果基值未定義則返回true,否則返回false。
  • IsSuperReference(V)。 如果此引用具有thisValue組件,則返回true。 本規范中使用以下抽象操作來操作引用...

這是語言內部。 從快速瀏覽一下,在對值執行附加操作之前,它看起來與類型推斷有關。 當你打電話時,這種操作會在較低的級別上執行

delete someObject.prop

要么

typeof someVarIdentifier

例:

("" + a);

Parse表達式 - > getValue(“”)+ getValue(a) - > string {“”} +(number {10} - > cast to string) - > concat(“”,“10”) - >“10”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM