0

区分已声明变量与未声明变量的可能重复 方式

我想在这里清楚地解释我的问题。我有这个条件。

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();
4

4 回答 4

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]);
于 2013-08-01T10:14:36.457 回答
2

为什么不使用对象?

var obj = {};
if(//conditon){
    obj.x1 = 1;
}
else if(//condition){
    obj.x2 = 2;
}

console.log(Object.keys(obj))

注意:如果这个问题,这与上一个 v1 给出的逻辑相同

于 2013-08-01T10:16:42.513 回答
0

您可以使用 typeof

if(typeof x1 !== "undefined"){
// ...
}
// other checks
于 2013-08-01T10:14:03.753 回答
0

您可以按名称迭代上下文对象。在全局上下文中它的窗口,因此您可以迭代窗口并检查
if(window[var_name] === undefined) 关于您的问题,如果为任何上下文定义了变量,还有另一种方法可以检查 - 记住所有变量,然后在每次更改上下文时写入新的变量列表定义。但它需要保留为您需要跟踪的上下文定义的变量列表

于 2013-08-01T10:18:28.567 回答