簡體   English   中英

JavaScript-可以在變量聲明期間定義先前聲明的對象的屬性嗎?

[英]JavaScript - Is it okay to define a property of a previously declared object during a variable declaration?

濫用賦值運算符的RTL關聯性是常見的做法(或至少在語法上在跨瀏覽器和JS的實現上至少在語法上有效),以便一個可以定義兩個變量(第一個為對象),以便第二個分配給(新)該對象的命名屬性,該對象本身已分配給另一個值,因此不會生成SyntaxError()?

我知道這聽起來很復雜,但這是代碼:

var x = {}, y = x.l = 9; // generates no errors
console.log(x.l, y); // 9 9

以來:

var t = {}, t.l = 9; // Syntax Error, no doubt because t is already defined

該行:

var x = {}, y = x.l = 9;

有效地變為:

var x = {};
var y = x.l = 9;

處理為:

// Parse phase
var x; // assigned the value undefined
var y; // assigned the value undefined

// Execution phase
x = {};
x.l = 9;
y = x.l;

注意,在賦值表達式中,右邊的值分配給左邊的表達式。 復合分配是從左到右評估的 ,但是從右到左分配的 ,因此xl = 9會在y = xl之前分配,即使它在右側。

現在,使用第二個示例進行嘗試:

var t = {}, t.l = 9;

變為:

// Parse phase
var t;   // assigned the value undefined
var t.l; // syntax error, stop

語句開頭的var關鍵字表示下一件事必須是有效的標識符。 tl不是有效的標識符(只能解釋為標識符,后跟點屬性訪問器),僅此而已。 一切都停止了。

您需要使用分號-這就是解析器期望的錯誤:

 var t = {}; tl = 9; console.log(t); 

暫無
暫無

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

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