Javascript 声明没有值的变量
我希望创建一个带有嵌套变量的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",
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!=未定义)
无论哪种情况都是如此。