I’m a bit confused about JavaScript’s undefined
and null
values.
What does if (!testvar)
actually do? Does it test for u
Try this:
// found on UglifyJS
variable = void 0;
The for if (something)
and if (!something)
is commonly used to check if something is defined or not defined. For example:
if (document.getElementById)
The identifier is converted to a boolean value, so undefined
is interpreted as false
. There are of course other values (like 0 and '') that also are interpreted as false
, but either the identifier should not reasonably have such a value or you are happy with treating such a value the same as undefined.
Javascript has a delete
operator that can be used to delete a member of an object. Depending on the scope of a variable (i.e. if it's global or not) you can delete it to make it undefined.
There is no undefined
keyword that you can use as an undefined literal. You can omit parameters in a function call to make them undefined, but that can only be used by sending less paramters to the function, you can't omit a parameter in the middle.
Set a variable to undefined in the js
javascript command line terminal that comes with Java on Ubuntu 12.10.
el@defiant ~ $ js
js> typeof boo
"undefined"
js> boo
typein:2: ReferenceError: boo is not defined
js> boo=5
5
js> typeof boo
"number"
js> delete(boo)
true
js> typeof boo
"undefined"
js> boo
typein:7: ReferenceError: boo is not defined
Put this in myjs.html:
<html>
<body>
<script type="text/JavaScript">
document.write("aliens: " + aliens);
document.write("typeof aliens: " + (typeof aliens));
var aliens = "scramble the nimitz";
document.write("found some aliens: " + (typeof aliens));
document.write("not sayings its aliens but... " + aliens);
aliens = undefined;
document.write("aliens deleted");
document.write("typeof aliens: " + (typeof aliens));
document.write("you sure they are gone? " + aliens);
</script>
</body>
</html>
It prints this:
aliens: undefined
typeof aliens: undefined
found some aliens: string
not sayings its aliens but... scramble the nimitz
aliens deleted
typeof aliens: undefined
you sure they are gone? undefined
WARNING! When setting your variable to undefined you are setting your variable to another variable. If some sneaky person runs undefined = 'rm -rf /';
then whenever you set your variable to undefined, you will receive that value.
You may be wondering how I can output the undefined value aliens at the start and have it still run. It's because of javascript hoisting: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
To answer your first question, the not operator (!
) will coerce whatever it is given into a boolean value. So null
, 0
, false
, NaN
and ""
(empty string) will all appear false.