设为首页收藏本站订阅更新

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

查看: 1700|回复: 8

[原创] Javascript学习第一季(2) [复制链接]

Rank: 4

升级  20%

注册时间
2007-11-24
威望
283
阅读权限
50
积分
600
帖子
175
精华
1
UID
79393
状态
当前离线
发表于 2008-6-24 13:44:14 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料
一键分享 一键分享
Javascript学习第一季(2)

上篇文章讲了js中的一些概念(词法结构) 和 数据类型(部分)。
这章我们 继续.然后了解下js中操作数据 和 函数的 作用域。

1,对象跟基本类型之间的转换:
不管何时,只是对象非空,在布尔环境中都为true.
如;
new Boolean(false);
new Number(0);
new String(“”);
new Array();
上面虽然内部值是false,但对象的值是true;
Object  valueOf()  toString()
其中Date类,是先执行toString()转换。

2,js中操作一个数据值:
任何语言都有自己的操作数据的方法;
Js也不例外,js有3种重要的方式来操作一个数据值。
1)    复制它。例如把它赋给一个新的变量。
2)    把它作为参数传递给一个函数或方法。
3)    可以和其他值比较大小。

Js通过传值和传址2种方式操作这些数据的值。
从名称可以看处,传值 是通过传递值来操作数据。在赋值的过程中,对实际的值进行了拷贝,存储到一个新的变量中。拷贝的值和原来的值是2份完全独立的值。所以如果你改变了拷贝的值,并不会影响原来的值。当比较大小时候,通常进行琢个字节比较。
传址 从名字来看,就是通过传递地址来操作数据。在赋值的过程中,对实际的值的地址(可以说是引用)进行了拷贝,他们不是完全的独立,所以如果你通过引用改变了值,那么原始的值也会改变。当比较大小的时候,通常是看他们是否引用同一个地址来比较。
简单的传址例子:
var a = new Date();
alert(a.getDate());
var b = a ;
b.setDate(21);
alert(a.getDate()) // 输出21

3,一般来说:
基本数据类型通过传值来操作的。(如果忘记了哪些是基本数据类型,可以往回看。)
对象数据类型通过传址来操作的。(比如 数组和函数)
例子:
<script>
//传值
a=1;
b=a;
b=2;
alert(a); //输出 1

//传址
x=[1,2];
y=x;  // 赋给y的只是x的一个引用,而不是x本身。数组已经在语句中被赋值了,执行过这段代码后,仍旧只有一个数组对象,只不过我们有2个对他的引用了。
y[0]=2;
alert(x[0] +" | " +x[1]);  //输出 2  |  2
</script>
其中我们必须注意字符串:
js中字符串是通过传址来复制和传递的,而他们是通过传值来比较的。
对象和数组是用传值来传递的,只不过传递的这个值实际是一个引用,而不是对象本身。
总结:
类型    复制    传递    比较
数字    传值    传值    传值
布尔    传值    传值    传值
字符串    不可变    不可变    传值
对象    传址    传址    传址
不可变:在JS中,没有方法去改变字符串值的内容。
对字符串来说,传值还是传址,意义不大。

4,垃圾收集机制:
Js中自动释放内存。
比如:
var  s  =”heelo”;
var  b   = s.toUpperCase();
s=b; //运行到这里后,js会自动检测不再使用某个对象,因为s=b了,所以js会自动释放字符串“heelo”所占的存储空间。即我们不能再获取原始的 “heelo” 值;.

5 , javascript变量:
Js是非类型的。它的变量可以放任何类型的值。

变量的声明:
var  a  ;
var  b  ;
或者
var  a , b ;
或者
var  a=0 , b=1 ;

重复声明 是合法的,
如果 遗漏声明 , js会隐式的声明该变量。当然隐式声明的变量总是全局变量。

6 , 变量的作用域:
Js有2种:全局和局部。
从名字的定义可以知道,全局变量的作用域是全局性的。
在js代码中,处处都有定义。
局部变量的作用域是局部的。
在函数体内定义。

同名的局部变量的优先级比同名的全局变量高,下面的例子说明了这点:
var a ="abc"; //全局变量
function check(){
var a = "efg"; //同名的局部变量
document.write(a);
}
check(); //  输出 efg

看一个比较经典的例子:
   var scope = "global";
function f(){
     alert(scope); //输出 undefined
     var scope = "local";
     alert(scope); //输出 local
}
f();

为什么第一个会输出undefined 呢?
因为js规定当 局部变量和全局变量的名称相同的时候,函数体内的同名全局变量会被隐藏。
那么刚才例子 实际 等价于:
function f(){
var scope;
alert(scope);
     scope = "local";
     alert(scope);
}
f();
OK,如果你看懂了这个例子,说明你对局部和全局的一些区别稍微了解了。

7 , 变量的作用域:
从里到外:
词法作用域    作用域链    变量查找
var x = 1;
function f(){
  var y =2 ;
function g(){
   var z =3 ;
}

}    调用g()对象; z =3 ;

  


调用f()对象; y =2 ;




全局变量  x = 1       在此定义了吗?
         是
否           
获得值
在此定义了吗?
         是
否           
获得值
在此定义了吗?
         是
否           
获得值
未定义

8 , 客户端全局变量:
在客户端js中,Window对象代表浏览器窗口,他是一个全局对象。、
比如 ;我们常用的 parseInt() , Math() 都是Window对象定义的属性。

Js允许多个全局变量的执行环境,每个环境有不同的全局对象。
比如:客户端js的每个独立的浏览器窗口,或者同一窗口的不同帧。
其中的代码都运行在自己的执行环境中,具有自己的全局对象。
当然可以使用 表达式 parent.frames[0].x  ; 来引用第一个帧中的全局变量 x  ;这样就把不同帧中的代码联系起来了。
不过这里有安全性问题。

总结;
主要讲了 传值和传址 和 函数的作用域 。
对新手来说稍微难理解些。如果还有不懂,可以google 搜索资料
或者联系我 ,可以去我的blog 给我留言 :
PJBlog" target="_blank">http://www.cssrain.cn/LoadMod.asp?plugins=GuestBookForPJBlog

今天讲到这里了,呵呵,明天继续。相信大家的js技术会一步步提高的。


由于格式问题。建议下载word版看:
http://www.cssrain.cn/demo/a/1-2.doc
已有 1 人评分威望 收起 理由
winter + 6 继续继续

总评分: 威望 + 6   查看全部评分

超级版主

5毛发一贴,千里不留行。

Rank: 8Rank: 8

注册时间
2007-2-27
威望
3584
阅读权限
150
积分
8408
帖子
3597
精华
12
UID
65747
状态
当前离线
发表于 2008-6-24 22:53:41 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料
支持

使用道具 举报

大恐龙

90后电脑疯子

Rank: 4

升级  53.6%

注册时间
2007-2-27
威望
432
阅读权限
50
积分
768
帖子
495
精华
0
UID
65748
状态
当前离线
发表于 2008-6-25 05:57:20 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料
路过支持一下

使用道具 举报

无忧元老

Ajaxer

Rank: 8Rank: 8

升级  0%

注册时间
2007-6-4
威望
821
阅读权限
90
积分
3874
帖子
1002
精华
0
UID
71066
状态
当前离线
发表于 2008-6-25 07:48:19 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料 QQ 查看个人网站

。。。

确实整理的不错

使用道具 举报

Rank: 2

升级  36%

注册时间
2008-5-21
威望
47
阅读权限
20
积分
104
帖子
45
精华
0
UID
87256
状态
当前离线
发表于 2008-6-25 12:04:20 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料
很好,支持下

使用道具 举报

Rank: 1

升级  88%

注册时间
2007-5-31
威望
16
阅读权限
10
积分
44
帖子
16
精华
0
UID
70843
状态
当前离线
发表于 2008-6-25 13:46:27 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料
顶!!!

使用道具 举报

Rank: 1

升级  10%

注册时间
2008-6-10
威望
1
阅读权限
10
积分
5
帖子
1
精华
0
UID
88197
状态
当前离线
发表于 2008-6-25 14:11:14 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料
:victory: :victory: :victory:

使用道具 举报

霸王龙

阿龍

Rank: 6Rank: 6

升级  2%

注册时间
2007-3-13
威望
270
阅读权限
70
积分
1040
帖子
283
精华
0
UID
66274
状态
当前离线
发表于 2008-6-28 12:02:05 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料 QQ 查看个人网站
感谢分享

使用道具 举报

Rank: 6Rank: 6

升级  9.1%

注册时间
2007-8-26
威望
998
阅读权限
70
积分
1182
帖子
274
精华
0
UID
75016
状态
当前离线
发表于 2008-6-28 17:31:25 |显示全部楼层 |串个门|加好友|打招呼|发消息 |
查看详细资料
收藏,顶。

使用道具 举报

您需要登录后才可以回帖 登录 | 加入无忧

Archiver|手机版|无忧脚本 ( 苏ICP备05080427号 )|值班电话:027-62300445  

GMT+8, 2012-2-7 21:32 , Processed in 0.173350 second(s), 15 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 1999-2011 无忧脚本

回顶部