8

我希望创建一个带有嵌套变量的 Javascript 对象,其中一些变量没有指定默认值。

我目前有这个:

var globalVarA = "foo";
var globalVarB = "bar";
var globalVarC;

function myFunction(){
  //do something
}

我希望将其更改为:

var myObject = {
  GlobalVars: {
     globalVarA: "foo",
     globalVarB: "bar",
     globalVarC
  },
  myFunction: function(){
     //do something
  }
}

但是我收到以下错误:

预期的 ':'

如何在没有值的情况下声明此变量?

这是最佳做法还是有其他更好的解决方案?

4

3 回答 3

13

如果要将变量定义为属性,GlobalVars则必须显式分配undefined给它们

GlobalVars: {
     globalVarA: "foo",
     globalVarB: "bar",
     globalVarC: undefined
  },

您的代码包含无效的符号,当使用对象文字符号时,您必须为每个变量指定一个值。这与 XML 或 formParams 等其他符号不同,您可以在不设置的情况下声明属性/属性。

请注意,在我的解决方案中,未定义的变量确实获得了一个默认值——该值只是原始值undefined,即未定义的变量默认返回的值。

但是,如果您这样做,您的变量确实会被定义globalVarC: undefined

GlobalVars.globalVarC;//undefined
GlobalVars.globalVarX;//undefined
GlobalVars.hasOwnProperty("globalVarC");//true
GlobalVars.hasOwnProperty("globalVarX");//false

规格

4.3.9 未定义值:

未为变量赋值时使用的原始值。

于 2013-03-20T12:33:12.430 回答
1

您需要指定一个值,globalVarC否则 json 的 javascript 语法将是错误的,因为您没有任何要初始化的值,您可以赋予该值undefined

undefined是一个原始值undefined的全局变量。

var myObject = {
  GlobalVars: {
     globalVarA: "foo",
     globalVarB: "bar",
     globalVarC: undefined
  },
  myFunction: function(){
     //do something
  }
}
于 2013-03-20T12:33:45.113 回答
0

您将希望undefined原始值成为默认值:

var myObject = {
  GlobalVars: {
     globalVarA: "foo",
     globalVarB: "bar",
     globalVarC: void 0
  },
  myFunction: function(){
     //do something
  }
}

void 0表达式给出 的值undefined,无论是否undefined“重新路由”。

于 2013-03-20T12:43:52.293 回答