Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 声明没有值的变量_Javascript_Variables_Global Variables - Fatal编程技术网

Javascript 声明没有值的变量

Javascript 声明没有值的变量,javascript,variables,global-variables,Javascript,Variables,Global Variables,我希望创建一个带有嵌套变量的Javascript对象,其中一些变量没有指定默认值 我目前有: var globalVarA = "foo"; var globalVarB = "bar"; var globalVarC; function myFunction(){ //do something } 我希望将此更改为: var myObject = { GlobalVars: { globalVarA: "foo", globalVarB: "bar",

我希望创建一个带有嵌套变量的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
  }
}
但是,我得到以下错误:

预期':'

如果没有值,如何声明此变量


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

如果要将变量定义为
GlobalVars
的属性,必须显式地将
未定义的
赋值给它们

GlobalVars: {
     globalVarA: "foo",
     globalVarB: "bar",
     globalVarC: undefined
  },
您的代码包含无效的符号,当使用对象文字符号时,必须为每个变量指定一个值。这与XML或formParams等其他表示法不同,在XML或formParams中,可以声明属性/属性而无需进行设置

请注意,在我的解决方案中,未定义的变量确实会得到一个默认值-该值只是原始值
undefined
,这是未定义的变量默认返回的值

但是,如果执行
globalVarC:undefined

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

4.3.9未定义值:

未为变量赋值时使用的原语值


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

undefined
是一个全局变量,其原始值未定义

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

您需要将
未定义的
原语值作为默认值:

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

void 0
表达式给出了
undefined
的值,而不管
undefined
是否被“重新路由”。

只是想知道。。这不会对值0调用JS编译器吗?我从来没有真正明白为什么你会改变undefined的值。按照同样的思路,可以更改Function.prototype.call的值。你会自己在生产代码中这样做吗?它有什么优势?我希望这不会显得太过激进,我真的很感兴趣你为什么要这么做。@BenjaminGruenbaum你说的“在值0上调用编译器”是什么意思?至于更改
未定义的
,当然没有人有任何好的理由这样做;-)
void
操作符调用以下表达式上的JavaScript编译器(在本例中为
0
,该表达式被转换为
“0”
,并返回
未定义的
)。在本例中,调用编译器似乎有点极端。甚至
globalVarC:(function(){var a;return a;})(
看起来更干净。我将做一个perf:)@BenjaminGruenbaum
(函数(a){returna;}())
较短,尽管我怀疑使用
void
:)会出现任何性能问题。令我惊讶的是,void实际上比chrome中的匿名函数更快:)我想让您知道这只是一个小提示。在需要之前根本不声明
globalVarC
,有什么坏处?因为您可以设置'GlobalVars.globalVarC=“随便什么”即使它没有被宣布,这也是一个极好的问题。例如,差异可能表现为
hasOwnProperty
检查。就个人而言,如果它只是用于该函数,在我自己的代码中,我会做
GlobalVars.globalVarC
,而不是显式地将其设置为未定义。是的,我可能也会这样做,因为如果你检查变量的存在,你会检查
if(GlobalVars.globalVarC!=未定义)
无论哪种情况都是如此。