Javascript中带括号的表达式是否返回引用?

si2*_*19e 4 javascript

我知道Javascript中带括号的表达式返回在括号中计算表达式的结果:

x = ( 1, 2, 3 );
Run Code Online (Sandbox Code Playgroud)

将评估上面的三个表达式,并返回最后一个的结果:'3',如其他一些帖子中所述.

来自SlickGrid的以下示例代码包含一些我不太确定我理解的内容:

  $(function () {
    for (var i = 0; i < 500; i++) {
      var d = (data[i] = {});
      d["title"] = "Record " + i;
      d["n1"] = Math.round(Math.random() * 10);
      d["n2"] = Math.round(Math.random() * 10);
      d["n3"] = Math.round(Math.random() * 10);
      d["n4"] = Math.round(Math.random() * 10);
      d["n5"] = Math.round(Math.random() * 10);
    }
    grid = new Slick.Grid("#myGrid", data, columns, options);
  })
Run Code Online (Sandbox Code Playgroud)

特别是表达式:

var d = (data[i] = {});
Run Code Online (Sandbox Code Playgroud)

似乎返回对带括号的表达式中初始化的关联数组的引用.

那确实是怎么回事?有没有更详细的解释?是否有理由这样做而不是更明显的事情,比如创建关联数组'd',然后将其设置为'data [i]'?

nnn*_*nnn 6

是.随着线:

var d = (data[i] = {});
Run Code Online (Sandbox Code Playgroud)

变量ddata[i]将二者最终参照由创建的相同空对象{}.

在JavaScript中,=运算符都在左侧设置变量并返回要设置的值.这意味着您可以在另一个表达式的中间执行赋值,可能使用括号来确保正确的操作顺序.

在您的示例中,括号是可选的 - 以下将具有相同的结果,因为关联性=是从右到左:

var d = data[i] = {};
Run Code Online (Sandbox Code Playgroud)

另一个任意的例子是在函数调用的参数中进行赋值:

alert(d = "hello");
Run Code Online (Sandbox Code Playgroud)

或者在分配对象引用时,您可以使用结果对所涉及的对象进行操作:

var d;
(d = {}).prop1 = "test";
console.log(d.prop1);   // prints "test"
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这不是[参考](http://www.ecma-international.org/ecma-262/5.1/#sec-8.7)的意思,特别是返回引用意味着您可以使用例如`delete`运算符它.在Java中实现的值/引用类型的区别实际上在Javascript中没有用,因为在Javascript中不可能观察到任何差异. (2认同)