判斷變量未定義undefine的問題

时间:2022-11-21 16:05:35
<script language="javascript">
function abc(i){
 alert(typeof(eval("z"+i)));
 alert(typeof(z1));
}
  abc(1);
</script>
==============
我想給一個動態命名的變量一個判斷。判斷是否有定義這個變量,
alert(typeof(eval("z"+i)));這樣不行啊,
alert(typeof(z1));這樣直接給出名字就可以得出undefine。
請問typeof(eval("z"+i))這樣動態命名的怎么判斷?

14 个解决方案

#1


<html>
<head>
<script language="javascript">
function system(a){
this.login=function(){
return(6);
}
}
nnn= function(){

}
nnn.prototype=new system();

var ttt=new nnn();
var y=1;
eval("var z"+y);
z1=2
alert(eval("z"+y));
a=ttt.login();
alert(a);
alert(typeof(eval("z"+y)));

</script>
</head>
<body onload="init()">
<script language="vbscript">
function init()

set ttt=document.getElementById("sele1")
 For i = 1To 50
        Set oOption = document.createElement("OPTION")
        oOption.Value = i
        oOption.text = i
        
        ttt.Add oOption
        Set oOption = Nothing
    Next
dim c(),b(2)
redim c(3)
c(0)=1
c(1)=2
b(0)=c(0)
b(1)=c(1)
'erase c
redim c(2)
for i=0 to ubound(b)-1
c(i)=b(i)
next
redim Preserve c(2)
t=ubound(c)
alert(t)
picinfo="aaa"
nnn="aaa_" & "1"
liu="bbb"
str="set " & picinfo & "_1" & "=" & "createobject(" & """" & "scripting.dictionary" & """" & ")"
'str = picinfo & "=" & liu
     'str=nnn & "=" & "liu"
'execute("picinfo=liu")
execute(str)
str1=picinfo & "_1" & ".add" & """" & "mmm" & """" & "," & """" & 111 & """"
execute(str1)
msgbox aaa_1("mmm")
'aaa.add "mmm",liu
'kkk=aaa("nnn")
'if len(kkk)=0 then
 ' msgbox "xxx"
  'end if
'alert eval(nnn)
    
 'set execute("picinfo=new jjj")
'set eval("picinfo=createobject(" & """" & "scripting.dictionary" & """" & ")")
'c=b
'a=b
document.write "liuxiaoyi666"
end function
class jjj
end class
</script>
<select id="sele1">
</select>
</body>

</html>

顺便赙赠一些代码了,你说的那个在前面我做完测试了,你就明白为什么是undefine了

#2


eval()是全局方法,当其他名称下调用它时,会抛出一个异常
<script language="javascript">
function abc(i){
  try
   {
 alert(typeof(eval("z"+i)));
}
  catch(e)
  {
   alert(e.message);
  }
}
  abc(1);
</script>

#3


to  afdfgg(午夜飞行),我不想要异常处理啊,因为我要判断如果变量没定义就不执行一些代码。

to liuxiaoyi666(兔子) 
变量定义了是可以得到值的,但我想判断没定义的情况下啊,为什么判断不到?如去掉a=ttt.login();就会出错啊。
//a=ttt.login();
alert(a);
alert(typeof(eval("z"+y)));

#4


那些赙赠的代码看来你不喜欢,那个是我做继承试验用的东西
var y=1;
eval("var z"+y);
z1=2
alert(eval("z"+y));
alert(typeof(eval("z"+y)));

这个是给你的,只有你给了值的时候才是number,没有值的时候当然是undefine,又没有定义过
你没有var过,又没有赋值不是undefine又能是什么呢??你即使不是eval出来的变量用个普通变量也是一样的啊

#5


看错。就是不要var定义就出错了啊。

var y=1;
eval("z"+y);//没有var就出错了
z1=2
alert(eval("z"+y));
a=ttt.login();
alert(a);
alert(typeof(eval("z"+y)));

#6


那些赙赠的代码我是喜欢的,也看了,还收葳了,学到了这样创建select的方法,谢谢

#7


eval没有返回值

#8


我的z1是一个表格的td的id名:<td id="z1">
因为权限的作用,有时候不输出这个表格到页面,所以有时候id=z1是没定义的,
我就是要判断z1这个表格是否有输出了,所以用z1是否存在来判断,
但是不知怎么判断z1是否存在啊?

#9


eval没有返回值,哦,
但eval是动态命名啊,没有eval就成不了名字好象。

#10


其实在eval("z"+i);时已经抛出异常了
在页面上没有docoment.all.test,当使用eval('document.all.test');时不会显示错误
但是如果使用try...catch...就会得到这个异常

#11


对啊,就是这样写了,原来要加document.all的,这样就可以判断了,谢谢
<script language="javascript">
function abc(i){
 alert(typeof(eval("document.all.z"+i)));
}
  abc(1);
</script>

#12


eval()后面的参数不会象普通以字符串为参数的函数一样,在继续操作前自动转成字符串,所以应该给它传递一个原始字符串,不要给它传递一个String对象。
另外,我查了一下资料,eval()里面的语句如果有返回值,它还会返回这个值

#13





讨论很激烈啊!

中午就看到这个贴子了,研究了一小会,但还是弄不出来,后来有事走开了。

现在回来一看,倒是学会了如何检测变量是否存在这一招了,感谢楼主和 028city(耶稣爱我)。


这个贴子Mark下来了~!·~


#14


如果要document.all来判断变量的话不行,因为
The all collection includes one element object for each valid HTML tag
Returns a reference to the collection of elements contained by the object.
只能判断HTML中的object
可以试一下下面的语句
var test = 'string';
alert(typeof(eval('document.all.test')));
始终都是undifined

要判断变量是否存在,还是得靠try...catch()...
function IsValidVariable(Variable){
try{
eval(Variable);
return true;
}
catch(e)
{
return false;
}
}

var test;
var VariableName = 'test1';
if ( IsValidVariable(VariableName) == true ){
alert( VariableName + ' is a variable');
}
else
{
alert( VariableName + ' is not a varliable');
}

#1


<html>
<head>
<script language="javascript">
function system(a){
this.login=function(){
return(6);
}
}
nnn= function(){

}
nnn.prototype=new system();

var ttt=new nnn();
var y=1;
eval("var z"+y);
z1=2
alert(eval("z"+y));
a=ttt.login();
alert(a);
alert(typeof(eval("z"+y)));

</script>
</head>
<body onload="init()">
<script language="vbscript">
function init()

set ttt=document.getElementById("sele1")
 For i = 1To 50
        Set oOption = document.createElement("OPTION")
        oOption.Value = i
        oOption.text = i
        
        ttt.Add oOption
        Set oOption = Nothing
    Next
dim c(),b(2)
redim c(3)
c(0)=1
c(1)=2
b(0)=c(0)
b(1)=c(1)
'erase c
redim c(2)
for i=0 to ubound(b)-1
c(i)=b(i)
next
redim Preserve c(2)
t=ubound(c)
alert(t)
picinfo="aaa"
nnn="aaa_" & "1"
liu="bbb"
str="set " & picinfo & "_1" & "=" & "createobject(" & """" & "scripting.dictionary" & """" & ")"
'str = picinfo & "=" & liu
     'str=nnn & "=" & "liu"
'execute("picinfo=liu")
execute(str)
str1=picinfo & "_1" & ".add" & """" & "mmm" & """" & "," & """" & 111 & """"
execute(str1)
msgbox aaa_1("mmm")
'aaa.add "mmm",liu
'kkk=aaa("nnn")
'if len(kkk)=0 then
 ' msgbox "xxx"
  'end if
'alert eval(nnn)
    
 'set execute("picinfo=new jjj")
'set eval("picinfo=createobject(" & """" & "scripting.dictionary" & """" & ")")
'c=b
'a=b
document.write "liuxiaoyi666"
end function
class jjj
end class
</script>
<select id="sele1">
</select>
</body>

</html>

顺便赙赠一些代码了,你说的那个在前面我做完测试了,你就明白为什么是undefine了

#2


eval()是全局方法,当其他名称下调用它时,会抛出一个异常
<script language="javascript">
function abc(i){
  try
   {
 alert(typeof(eval("z"+i)));
}
  catch(e)
  {
   alert(e.message);
  }
}
  abc(1);
</script>

#3


to  afdfgg(午夜飞行),我不想要异常处理啊,因为我要判断如果变量没定义就不执行一些代码。

to liuxiaoyi666(兔子) 
变量定义了是可以得到值的,但我想判断没定义的情况下啊,为什么判断不到?如去掉a=ttt.login();就会出错啊。
//a=ttt.login();
alert(a);
alert(typeof(eval("z"+y)));

#4


那些赙赠的代码看来你不喜欢,那个是我做继承试验用的东西
var y=1;
eval("var z"+y);
z1=2
alert(eval("z"+y));
alert(typeof(eval("z"+y)));

这个是给你的,只有你给了值的时候才是number,没有值的时候当然是undefine,又没有定义过
你没有var过,又没有赋值不是undefine又能是什么呢??你即使不是eval出来的变量用个普通变量也是一样的啊

#5


看错。就是不要var定义就出错了啊。

var y=1;
eval("z"+y);//没有var就出错了
z1=2
alert(eval("z"+y));
a=ttt.login();
alert(a);
alert(typeof(eval("z"+y)));

#6


那些赙赠的代码我是喜欢的,也看了,还收葳了,学到了这样创建select的方法,谢谢

#7


eval没有返回值

#8


我的z1是一个表格的td的id名:<td id="z1">
因为权限的作用,有时候不输出这个表格到页面,所以有时候id=z1是没定义的,
我就是要判断z1这个表格是否有输出了,所以用z1是否存在来判断,
但是不知怎么判断z1是否存在啊?

#9


eval没有返回值,哦,
但eval是动态命名啊,没有eval就成不了名字好象。

#10


其实在eval("z"+i);时已经抛出异常了
在页面上没有docoment.all.test,当使用eval('document.all.test');时不会显示错误
但是如果使用try...catch...就会得到这个异常

#11


对啊,就是这样写了,原来要加document.all的,这样就可以判断了,谢谢
<script language="javascript">
function abc(i){
 alert(typeof(eval("document.all.z"+i)));
}
  abc(1);
</script>

#12


eval()后面的参数不会象普通以字符串为参数的函数一样,在继续操作前自动转成字符串,所以应该给它传递一个原始字符串,不要给它传递一个String对象。
另外,我查了一下资料,eval()里面的语句如果有返回值,它还会返回这个值

#13





讨论很激烈啊!

中午就看到这个贴子了,研究了一小会,但还是弄不出来,后来有事走开了。

现在回来一看,倒是学会了如何检测变量是否存在这一招了,感谢楼主和 028city(耶稣爱我)。


这个贴子Mark下来了~!·~


#14


如果要document.all来判断变量的话不行,因为
The all collection includes one element object for each valid HTML tag
Returns a reference to the collection of elements contained by the object.
只能判断HTML中的object
可以试一下下面的语句
var test = 'string';
alert(typeof(eval('document.all.test')));
始终都是undifined

要判断变量是否存在,还是得靠try...catch()...
function IsValidVariable(Variable){
try{
eval(Variable);
return true;
}
catch(e)
{
return false;
}
}

var test;
var VariableName = 'test1';
if ( IsValidVariable(VariableName) == true ){
alert( VariableName + ' is a variable');
}
else
{
alert( VariableName + ' is not a varliable');
}