So I have been working with javascript for a website I am designing, shocker I know, I was trying to find a way to test if a variable did not exist or wasn’t defined. After getting through this I think being undefined and not existing are two different things. Also I think its highly unlikely I found a bug but maybe someone with a better understanding of Javascript can explain to me why the following code works the way it does.
<script type="text/javascript">
var t1="";
var t2;
if (t1==undefined) {document.write("t1 is undefined");}
if (t2==undefined) {document.write("t2 is undefined");}
</script>
The above code returns “t2 is undefined”.
<script type="text/javascript">
var t1="";
if (t1==undefined) {document.write("t1 is undefined");}
if (t2==undefined) {document.write("t2 is undefined");}
</script>
This second code crashes I believe. So in the first code t2 exists but is not defined? and in the second code it needs to exist before it can be undefined? I just figured that if I did not write “var t2;” then tested for it, it would be undefined. Hopefully I have explained this question enough.
It’s not a bug. In fact, the
typeofoperator is the only place where you can use an undeclared variable without getting an error.See my answer Internet Explorer: "console is not defined" Error for a detailed explanation
edit:
This is how it’s defined in the specs:
Everywhere else,
IsUnresolvableReference==trueresults in an error.