开发者

var undefined = true;

开发者 https://www.devze.com 2022-12-25 02:24 出处:网络
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

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 speci开发者_高级运维al 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...


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.


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.


Uninitialized variables get the special value undefined. When you assign a variable to another variable you're giving it a string that references a variable you've defined within the current scope. In this case you've defined a variable named undefined so the JavaScript engine will look first through the variables, see that you've named one undefined and then assign it that variable.

0

精彩评论

暂无评论...
验证码 换一张
取 消