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 t = {};
t.l = 9;
console.log(t);
行:
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 = 9
在y = x.l
之前赋值,尽管它在右边。
现在试试第二个例子:
var t = {}, t.l = 9;
变成:
// Parse phase
var t; // assigned the value undefined
var t.l; // syntax error, stop
语句开头的 var 关键字意味着接下来的事情必须是有效的标识符。 t.l
不是有效标识符(它只能被解释为标识符后跟一个点 属性 访问器),就是这样。一切都停止了。
滥用赋值运算符的 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 t = {};
t.l = 9;
console.log(t);
行:
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 = 9
在y = x.l
之前赋值,尽管它在右边。
现在试试第二个例子:
var t = {}, t.l = 9;
变成:
// Parse phase
var t; // assigned the value undefined
var t.l; // syntax error, stop
语句开头的 var 关键字意味着接下来的事情必须是有效的标识符。 t.l
不是有效标识符(它只能被解释为标识符后跟一个点 属性 访问器),就是这样。一切都停止了。