Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

var undefined = true;

Tags:

javascript

I'm doing some experimenting with this malicious JavaScript line: var undefined = true;

Every uninitialized variable in JavaScript has the value of undefined which is just a variable that holds the special value of 'undefined', so the following should execute the alert:

var undefined = true, 
    x;

if (x) {
    alert('ok');
}

But it doesn't, and my question is why?

On further experimentation, I tried the following:

var undefined = true, 
    x = undefined;

if (x) {
    alert('ok');
}

This time, the alert is executed.

So my question is...since in the first snippet x holds undefined (because it is not initialized), why didn't the alert execute? The strange thing is that when explicitly stating that x is undefined (x = undefined), the alert executed...

like image 825
Andreas Grech Avatar asked Mar 28 '10 19:03

Andreas Grech


2 Answers

There is a difference between a variable named undefined and the value called undefined.

var undefined = true, 
    x;

In this example, the variable undefined is set to the value true, and x to the value (not the variable!) undefined.

var undefined = true, 
    x = undefined;

In this example, the variable undefined is set to the value true as well, and x is set to the value contained in the variable undefined (which is true).

So, while you can declare a variable named undefined, you cannot change the fact that non-initialized variables are set to the value undefined.

like image 176
dtb Avatar answered Oct 24 '22 15:10

dtb


Just declaring a variable called "undefined" does not mean that you're overriding the built-in concept of what the native "undefined" value is.

Imagine if Java would let you use "null" as an identifier. Well, I guess Java doesn't have the same coercion as Javascript. Anyway the Javascript statement

if (x) alert("foo");

involves an implicit coercion of the value of "x" to boolean. The value isn't defined, so its coercion to "boolean" results in false.

like image 27
Pointy Avatar answered Oct 24 '22 13:10

Pointy