`
energykey
  • 浏览: 597550 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Js 的undefined

阅读更多
<html>
<head>
<script type="text/javascript">
var a=100;
var b=true;
function test(){
	alert(a);
	alert(b);
	b=false;
	alert(b);
	var a=200;
	alert(a/2);
	alert(++Math.PI);
	alert(Math.PI++);
}
</script>
</head>

<body onload="test()">
</body>
<html>
 


大家猜猜上面的执行结果是什么,然后再COPY一个HTML,执行以下,然后再想想为什么。。。
分享到:
评论
22 楼 afcn0 2009-07-30  
nickevin 写道
var scope = "global";
function f() {
	alert(scope);  
	var scope = "local"; 
	alert(scope); 
}
f();



你可能认为第一次调用alert的值是global因为局部变量scope还未执行.

但是由于变量作用域的机制结果出人意料

局部变量scope在函数f中定义这意味着与之同名的全局变量scope将会被隐藏
虽然局部变量已定义但是真正的初始化将在var scope之后

也就是正如以下代码

function f() {
    var scope;  
    alert(scope);  
    scope = "local";  
    alert(scope); 
}


有此可见局部变量的声明将被解析器移至函数的入口处

此例说明了一个好的编程习惯将所有局部变量声明在函数的开头这样自己清楚别人也不会误会了

这个是不错的,函数的声明变量由于其特殊性,可以规定出了第一行以外,下面不许擅自声明任何变量
21 楼 达达乐队 2009-07-27  
例子没什么实际的作用,但是通过这个例子,可以弄懂JavaScript变量作用域的问题。不清楚为什么这么多人投隐藏啊,例子还是不错的,不过ms,标题和代码要说明的问题没什么关系,,
20 楼 nickevin 2009-07-24  
var scope = "global";
function f() {
	alert(scope);  
	var scope = "local"; 
	alert(scope); 
}
f();



你可能认为第一次调用alert的值是global因为局部变量scope还未执行.

但是由于变量作用域的机制结果出人意料

局部变量scope在函数f中定义这意味着与之同名的全局变量scope将会被隐藏
虽然局部变量已定义但是真正的初始化将在var scope之后

也就是正如以下代码

function f() {
    var scope;  
    alert(scope);  
    scope = "local";  
    alert(scope); 
}


有此可见局部变量的声明将被解析器移至函数的入口处

此例说明了一个好的编程习惯将所有局部变量声明在函数的开头这样自己清楚别人也不会误会了
19 楼 afcn0 2009-07-23  
就是执行完b=false,b还是全局的,不是在test里var的,函数执行默认没有指定执行对象,会按照全局方法来处理,也就是说全局就是this this.b就是全局的b
18 楼 yesir 2009-07-23  
yuankai 写道
这个是因为javascript的加载顺序有关,从小的作用域往外找。
LZ在test方法里面又声明了局部变量a,所以在test方法执行的时候就在test方法的作用域里面找变量a,但是a只是声明并没有赋值,所以alert(a)的时候就是undefined.
至于为什么变量b是true,是因为在test执行的时候,没有找到this.b,所以就在外部找,正好有一个全局变量b=true,所以alert(b)就是true,后面的内容就没啥好说的。


这个this说的很到位。
17 楼 hydex 2009-07-21  
sevenkylin 写道
lgpcl110 写道
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??

一个是用var在函数内定义了一个局部变量, 而一个是没有用var而在函数内定义了一个全局变量, 分清这点就知道了~

没有用var一个局部的话,在局部使用全局变量没错,而你var了局部变量,自然就用局部变量覆盖了全局不量,上面有人已经说的很明白了,你就当test()中,顶部有一个var a;
16 楼 afcn0 2009-07-21  
这个主要是var对于本次作用域声明的预先处理,副值操作按照顺序执行,看到的预处理undefined的现象,所以对于var的是用药比较注意,会影响前面的代码执行效果
15 楼 faylai 2009-07-20  
执行的很正常
14 楼 energykey 2009-07-16  
这个就是作用域的问题,总之这种问题也不值得花太多的心思,这个a为什么会出现undefined就是因为函数内部也声明了一个var a=200;这个声明覆盖了方法外面的声明。

当然,如果你在java里这样写,结果是不会影响的,这个跟js的解析顺序有关。前面的 yuankai 还有sevenkylin基本已经讲清楚了,我就不啰嗦了。
13 楼 sevenkylin 2009-07-15  
lgpcl110 写道
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??

一个是用var在函数内定义了一个局部变量, 而一个是没有用var而在函数内定义了一个全局变量, 分清这点就知道了~
12 楼 sevenkylin 2009-07-15  
yuankai 写道
这个是因为javascript的加载顺序有关,从小的作用域往外找。
LZ在test方法里面又声明了局部变量a,所以在test方法执行的时候就在test方法的作用域里面找变量a,但是a只是声明并没有赋值,所以alert(a)的时候就是undefined.
至于为什么变量b是true,是因为在test执行的时候,没有找到this.b,所以就在外部找,正好有一个全局变量b=true,所以alert(b)就是true,后面的内容就没啥好说的。

这几天在看JS, 这个问题不是说找不到里面的, 而是作用域的问题, var关键字的作用, 在函数内定义变量, 不加var关键字的话, 就被认为是全局变量, 所以, 会先得到先定义的true, 然后执行到false后, 就改变了值~
11 楼 jxpath 2009-07-15  
如下情况使返回 undefined 值:

对象属性不存在,
声明了变量但从未赋值。
10 楼 gokure 2009-07-14  
因为javascript会事先给var定义的变量分配地址空间,所以之前定义的变量a与test()内部定义的变量a是不同作用域的变量
9 楼 whaosoft 2009-07-14  
报未定义是在a 那儿的问题吗?
8 楼 containsoft 2009-07-14  
lgpcl110 写道
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??

在test()方法内申明了var a=200;这个时候alert(a),就调用方法内申明的这个a。而方法内没申明b,只是给b重新赋值,所以alert(b)就之内找外面申明的那个b。
7 楼 lgpcl110 2009-07-14  
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??
6 楼 yuankai 2009-07-06  
这个是因为javascript的加载顺序有关,从小的作用域往外找。
LZ在test方法里面又声明了局部变量a,所以在test方法执行的时候就在test方法的作用域里面找变量a,但是a只是声明并没有赋值,所以alert(a)的时候就是undefined.
至于为什么变量b是true,是因为在test执行的时候,没有找到this.b,所以就在外部找,正好有一个全局变量b=true,所以alert(b)就是true,后面的内容就没啥好说的。
5 楼 gniavaj 2009-07-03  
06softwaregaojie 写道
但是b不也是这种情况吗,为什么它就不是undefined?

b的作用域不同,它是全局变量。
4 楼 06softwaregaojie 2009-07-03  
但是b不也是这种情况吗,为什么它就不是undefined?
3 楼 gniavaj 2009-07-03  
定义一个function的时候会把内部声明的变量置顶

即可以看成
function test(){ 
     var a;
     alert(a);
     。。。
     。。。
     。。。
     a=200; 

相关推荐

    理解javascript中undefined和null的区别

    理解javascript中undefined和null的区别

    js判断undefined类型,undefined,null,NaN的区别

    JavaScript 中的 undefined、null、NaN 的区别 在 JavaScript 中,undefined、null、NaN 是三个经常被混淆的概念,但它们有着不同的含义和用途。今天,我们将深入探讨这三个概念的区别和应用。 undefined 在 ...

    【JavaScript源代码】JavaScript之不可靠的undefined.docx

    在JavaScript编程语言中,"undefined"是一个特殊值,表示变量未声明或已声明但未赋值。然而,正如文档标题和描述所指出的,JavaScript中的`undefined`并不总是可靠的,这意味着它并不总是代表我们期望的“未定义”...

    js判断undefined类型,undefined,null, 的区别详细解析

    js判断undefined类型 今天使用showModalDialog打开页面,返回值时。当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined所以自作聪明判断  var reValue=window.showModalDialog(“”,””,””); ...

    JavaScript Undefined,Null类型和NaN值区别

    "JavaScript Undefined、Null类型和NaN值区别" JavaScript 中的Undefined、Null和NaN是三个特殊的值,经常被混淆和误解,本文将详细介绍这三个值的定义、区别和使用场景。 Undefined类型 Undefined类型只有一个值...

    Javascript中判断一个值是否为undefined的方法详解

    但是在javascript中,怎么检查一个值是否为undefined呢? 简单来说,在现代浏览器中,你可以安全的比较变量是否为undefined if (name === undefined) {...} 一些人反对直接使用undefined变量进行比较,因为在旧的...

    js判断undefined类型示例代码

    代码如下: if (reValue== undefined){ alert&#40;“undefined”&#41;; } 发现判断不出来,最后查了下资料要用typeof方法: if (typeof(reValue) == “undefined”) { alert&#40;“undefined”&#41;; } typeof 返回的...

    JavaScript undefined及null区别实例解析

    在JavaScript编程语言中,`undefined` 和 `null` 是两种特殊的值,它们在某些方面具有相似性,但也存在明显的差异。这两个概念对于理解和编写健壮的JavaScript代码至关重要,特别是对于那些处理变量状态和数据类型的...

    javascript中的undefined 与 null 的区别 补充篇

    之前软件开发网发不过类似的文章JavaScript null和undefined区别分析JavaScript Undefined,Null类型和NaN值区别先说说undefined: Javascript中的变量是弱类型的(关于这个我想就不用我多解释啦), 所以声明变量的...

    JavaScript中undefined和null的区别

    JavaScript中undefined和null的区别 JavaScript两个表示”无”的值:undefined和null。我在平时只是null用的多一点,undefined只是在报错中经常遇到。下面针对这两个数据类型的异同做一下详细的比较。 1.undefined和...

    Vue打包Cannot read property 'tapPromise' of undefined报错处理.docx

    然而,在使用Vue.js时,我们可能会遇到一些报错信息,例如Cannot read property 'tapPromise' of undefined。这是一种TypeError,发生在webpack编译过程中。下面我们将详细介绍这个报错信息的解决方法。 一、报错...

    JS 中如何判断 undefined null.rar

    在JavaScript(JS)编程中,`undefined` 和 `null` 是两种不同的特殊值,它们各自表示不同的含义。理解和正确地判断这两个值对于编写健壮的JavaScript代码至关重要。在这篇文章中,我们将深入探讨如何在JavaScript中...

    javascript中undefined与null的区别

    在JavaScript编程语言中,`undefined` 和 `null` 是两种不同的原始类型,它们虽然在某些情况下表现出相似的行为,但有着本质的区别。理解这两者的差异对于编写健壮的JavaScript代码至关重要。 首先,`undefined` 和...

    在JavaScript中学习undefined学习总结.doc

    在JavaScript中,`undefined`是一个特殊的值,它代表了一个变量被声明但未被赋值的情况,或者是尝试访问一个对象上不存在的属性时的结果。深入理解`undefined`对于编写健壮的JavaScript代码至关重要。 首先,我们要...

    JavaScript中猎取纯正的undefined的方法_.docx

    在JavaScript编程中,正确理解和获取`undefined`值是至关重要的,因为这直接影响到代码的健壮性和可维护性。在某些情况下,我们可能需要确保一个变量确实为`undefined`,而不是其他任何值,以进行有效的条件检查。...

    javascript 中null和undefined区分和比较

    在JavaScript编程语言中,`null`和`undefined`是两种非常重要的值,它们在很多情况下容易引起混淆。本文将深入探讨两者之间的区别和比较。 首先,`undefined`是一种特殊的值,它代表变量已经被声明但没有赋值。在...

    JavaScript判断undefined类型的正确方法

    在JavaScript编程中,判断一个变量是否为undefined是一个基础但非常重要的操作。由于JavaScript是一种弱类型的语言,所以在进行变量比较时,如果不注意类型安全,就很容易出现意外的错误。在早期的JavaScript代码中...

    js判断undefined变量类型使用typeof

    在JavaScript中,判断一个变量是否为undefined类型是一个基础而又重要的操作。对于初学者来说,能够准确地识别变量的类型是非常关键的,而typeof操作符正是用于这一目的。typeof是一个一元操作符,用于检测变量或...

Global site tag (gtag.js) - Google Analytics