繁体   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