【问题标题】:var a, b, c = {}变量 a, b, c = {}
【发布时间】:2011-10-19 23:42:57
【问题描述】:

我认为语法:

var a, b, c = {};

意味着这三个变量是独立的,而不是对同一个 {} 的引用。

这是因为 {} 是一个对象并且这是标准行为吗?

如果我这样做:

var a, b, c = 0;

这三个确实是分开的而不是引用?

谢谢, 卫斯理

【问题讨论】:

  • 你能解释更多吗?我不明白
  • 我不明白。在您的第一个示例中,abundefined。什么意思?
  • 你的意思是var a = b = c = {};

标签: javascript object reference assignment-operator


【解决方案1】:

他们不应该是一样的,不。只有c 会被赋值。

ab 只会被声明,但不会初始化为任何东西(它们是未定义的)。 c 作为其中唯一的一个,将被初始化为 {}

也许写成几行会更清楚:

var a,      // no assignment
    b,      // no assignment
    c = {}; // assign {} to c

【讨论】:

    【解决方案2】:
    var a, b, c = {};
    

    这将声明 3 个变量 (a, b, c) 但只定义 1 个变量 (c)。

    var a, b, c = 0;
    

    这将声明 3 个变量 (a, b, c) 但只定义 1 个变量 (c)。

    【讨论】:

      【解决方案3】:

      在示例中,您只定义最后一个元素

      ab 未定义

      【讨论】:

        【解决方案4】:

        var a, b, c = {}; 只定义了最后一个变量,即c。它类似于var a = {}, b = [], c = 0;的语法

        这只是声明多个变量的简写。

        【讨论】:

          【解决方案5】:

          使用逗号分隔变量可以更紧凑地在同一范围内定义多个变量。但是,在您的示例中,只有 c = {}ab 将是 undefined。您可以使用类似的构造来分配类似

          var a = {first: 'foo'}, 
              b = {second: 'bar'}, 
              c = {third: 'foobar'};
          

          等于

          var a = {first: 'foo'}, b = {second: 'bar'}, c = {third: 'foobar'};
          

          还有

          var a = {first: 'foo'};
          var b = {second: 'bar'};
          var c = {third: 'foobar'};
          

          每个人都只会引用他们各自的对象。使用昏迷基本上只是一个视觉方面。

          【讨论】:

            【解决方案6】:

            是的,这三个是分开的。

            逗号运算符计算左操作数,然后计算右操作数,然后返回右操作数的值。

            如果您只依赖操作数的求值而不对返回的值做任何事情,那么这是一种连续声明一堆变量的好方法。

            var i = 0, j = 1, k = 2;基本等同于var i = 0; var j = 1; var k = 2

            另一个用途是将多个操作压缩到一行而不使用;,就像在具有多个循环变量的 for 循环中一样:

            for(var x=0,y=5; x < y; x++,y--)

            注意 x++ 和 y-- 是如何在同一行上执行的。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-08-01
              • 2015-06-12
              • 1970-01-01
              • 1970-01-01
              • 2020-05-17
              • 1970-01-01
              • 2021-10-04
              相关资源
              最近更新 更多