区分声明变量与未声明变量-2的方法

时间:2013-08-01 10:10:42

标签: javascript

可能重复 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();

4 个答案:

答案 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 - 记住所有变量,然后在每次更改上下文时都会定义新的变量列表。但它需要保留为您需要跟踪的上下文定义的变量列表