首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >var undefined = true;

var undefined = true;
EN

Stack Overflow用户
提问于 2010-03-29 03:47:19
回答 3查看 4K关注 0票数 7

我正在用这个恶意的JavaScript代码行做一些实验:var undefined = true;

JavaScript中每个未初始化的变量都有undefined的值,这只是一个保存'undefined'特殊值的变量,因此下面的代码应该执行alert

代码语言:javascript
复制
var undefined = true, 
    x;

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

但事实并非如此,我的问题是为什么?

在进一步的实验中,我尝试了以下方法:

代码语言:javascript
复制
var undefined = true, 
    x = undefined;

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

这一次,将执行alert

所以我的问题是,第一个代码片段is...since中的x包含undefined (因为它没有初始化),为什么alert没有执行?奇怪的是,当显式声明xundefined (x = undefined)时,alert执行...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-29 03:55:49

名为undefined的变量和名为undefined的值之间存在差异。

代码语言:javascript
复制
var undefined = true, 
    x;

在本例中,变量undefined被设置为值true,而x被设置为值undefined (而不是变量!)。

代码语言:javascript
复制
var undefined = true, 
    x = undefined;

在本例中,变量undefined也被设置为值true,而x被设置为变量undefined中包含的值(即true)。

因此,虽然可以声明一个名为undefined的变量,但不能更改将未初始化的变量设置为值undefined的事实。

票数 17
EN

Stack Overflow用户

发布于 2010-03-29 03:55:18

仅仅声明一个名为"undefined“的变量并不意味着你覆盖了原生”未定义“值的内置概念。

想象一下,如果Java允许您使用"null“作为标识符。好吧,我猜Java不像Javascript那样具有强制性。不管怎样,Javascript语句

代码语言:javascript
复制
if (x) alert("foo");

将"x“的值隐式强制转换为布尔值。该值未定义,因此它强制为"boolean“会导致false

票数 1
EN

Stack Overflow用户

发布于 2010-03-29 03:57:29

未初始化的变量将获得特殊值undefined。当您将一个变量赋给另一个变量时,您为它提供了一个字符串,该字符串引用了您在当前作用域中定义的变量。在本例中,您定义了一个名为undefined的变量,因此JavaScript引擎将首先查看这些变量,可以看到您已经命名了一个undefined,然后将该变量赋值给它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2534260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档