可以将对象文字内的多个属性设置为相同的值吗?

Pit*_*taJ 21 javascript properties object-literal

例如,我可以这样做吗?:

{ 
   a: b: c: d: 1,
   e: 2,
   geh: function() { alert("Hi!") }
}
Run Code Online (Sandbox Code Playgroud)

编辑:有什么方法可以避免这样做吗?:

{ 
   a: 1,
   b: 1,
   c: 1,
   d: 1,
   e: 2,
   geh: function() { alert("Hi!") }
}
Run Code Online (Sandbox Code Playgroud)

Peb*_*bbl 22

对此进行更新(根据最新的JavaScript功能)避免不必要的已定义变量:

{
  let v;
  var obj = {
     "a": (v = 'some value'),
     "b": v,
     "c": v
  };
}
Run Code Online (Sandbox Code Playgroud)

这意味着v不会在块外定义,但obj将会.

原始答案

另一种做同样事情的方法是:

var v;
var obj = {
     "a": (v = 'some value'),
     "b": v,
     "c": v
};
Run Code Online (Sandbox Code Playgroud)


Sam*_*son 8

您可以在各种属性之间设置一条相等的线:

var foo = {};
foo.a = foo.b = foo.c = "Hello";
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个为您执行批量分配的方法:

var foo = {
    setValue: function( props, value ) {
        while ( props.length ) this[ props.pop() ] = value;
    }
}

foo.setValue( [ "a", "b", "c" ] , "Foo" );
Run Code Online (Sandbox Code Playgroud)

  • @ user1689607当我在我的控制台中乱砍时,我感到很震惊; 显然我忘记了在运行该代码之前我已经用`a`属性声明了`foo`. (2认同)