JavaScript - 在变量声明期间定义先前声明的对象的属性是否可以?

标签 javascript object properties 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;

请注意,在赋值表达式中,右侧的值将分配给左侧的表达式。复合赋值是从左到右求值,但赋值是从右到左,因此x.l = 9y = x.l<之前赋值,即使它在右侧。

现在尝试第二个示例:

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

变成:

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

语句开头的 var 关键字意味着接下来的内容必须是有效的标识符。 t.l 不是一个有效的标识符(它只能被解释为一个标识符后跟一个点属性访问器),所以就是这样。一切都停止了。

关于JavaScript - 在变量声明期间定义先前声明的对象的属性是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615111/

相关文章:

java - 如何在 Java 中将 json 转换为 ArrayList 对象?

java - EHCache 禁用/关闭

c++ - 在另一个构造函数中调用对象数组的构造函数

java - 为什么我的循环没有检索到最后的项目?

objective-c - ARC : strong or retain? 的@property 定义

python - 为什么只读属性是可写的?

javascript - 当用户关闭浏览器时,Socket.io 不会关闭连接

javascript - 如何根据keyup统计单词数

javascript - 基于浏览器的JS数据库

javascript - 在 View 中使用 C# MVC 多个动态模型