可能重复 Way to differentiate between declared variable vs undeclared
我想在这里清楚地解释我的问题。 我有这种情况。
if(//condition1)
var x1 = 1;
else if(//condition2)
var x2 = 2;
else if(//condition3)
var x3 = 3;
这样我只能声明一个变量。 现在我想打印声明的变量。 我怎么能这样做?
这是我想要做的更现实的例子:
var d_pattern=/d{1}/;
var dd_pattern=/d{2}/;
var ddd_pattern=/d{3}/;
var dddd_pattern=/d{4}/;
if(dddd_pattern.test(formatString))
var dddd=this.getDayName();
else if(ddd_pattern.test(formatString))
var ddd=this.getDayNameAbbr();
else if(dd_pattern.test(formatString))
var dd=this.getDateFormatted();
else if(d_pattern.test(formatString))
var d=this.getDate();
答案 0 :(得分:3)
使用另一个变量来保存信息:
var which;
if (condition1) {
var x1 = 1;
which = 'x1';
} else if (condition2) {
var x2 = 2;
which = 'x2';
} else if (condition3) {
var x3 = 3;
which = 'x3';
}
console.log('Declared variable is: ' + which);
但请记住,正如您在前面的问题中的几个答案中所解释的那样,提升会导致声明所有变量。
如果您希望能够使用which
来显示变量的值,那么最好使用一个名称为属性的对象:
var obj = {}, which;
var which;
if (condition1) {
obj.x1 = 1;
which = 'x1';
} else if (condition2) {
obj.x2 = 2;
which = 'x2';
} else if (condition3) {
obj.x3 = 3;
which = 'x3';
}
console.log('Declared variable is: ' + which + ' value is: ' + obj[which]);
答案 1 :(得分:2)
为什么不使用对象?
var obj = {};
if(//conditon){
obj.x1 = 1;
}
else if(//condition){
obj.x2 = 2;
}
console.log(Object.keys(obj))
注意:如果这个问题
,这与上一个v1给出的逻辑相同答案 2 :(得分:0)
您可以使用typeof
if(typeof x1 !== "undefined"){
// ...
}
// other checks
答案 3 :(得分:0)
您可以按名称迭代上下文对象。在全局上下文中它的窗口,所以你可以迭代窗口并检查
if(window[var_name] === undefined)
关于你的问题,如果为任何上下文定义变量,还有另外一种方法可以实现cehck - 记住所有变量,然后在每次更改上下文时都会定义新的变量列表。但它需要保留为您需要跟踪的上下文定义的变量列表