JavaScript是NetScape开发的一种基于客户端浏览器,面向对象,时间驱动的网页脚本语言.
JavaScript特点:
简单,易学,易用.
跨平台;IE;Navigator
符合ECMA(欧洲计算机制造协会)标准,可移植性.
时间驱动式的脚本程序设计思想.
动态,交互式的操作方式.
JavaScript的格式:
JavaScript区分大小写.
JavaScript脚本程序须嵌入在HTML文件中.
每行写一条脚本语句.
语句末尾可以加分号.
JavaScript脚本程序可以保存为一个外部文件, 但其中不能包含标签.
document.write("HelloWorld!!!");
声明变量: var stdId ;
定义在函数外的变量都是全局变量.
在函数里边使用var定义变量,该变量时局部变量, 如果不加var是全局变量.
with关键字:
with语句: (对象操作语句)
功能: 为一段程序建立默认对象.
规格是: with(<对象>){
<语句组>
}
例: with(document)
{
write("
write("
write("
write("
}
for..in语句: 重复执行指定对象的所有属性:
格式:
for(变量in对象){
<语句组>
}
例: for(var i in obj)
{
str += objString + "." + i + " = " + obj[i] + "
";
}
此处i表示属性, obj[i]表示属性值.
其他语句与我们学习过的高级语言(如Java)相似, 比如if…else, for(), switch, break,continue等等. 所以不再赘述.
JavaScript提供的默认对象:
--日期对象:
格式: 日期对象名称=new Date([日期参数])
日期参数: 1. 省略(最常用的);
2.英文-数值格式: 月,日,公元年[时:分:秒]
如: today=new Date("October,1,2008 12:00:00")
3.数值格式: 公元年,月, 日,[时,分,秒]
如: today=new Date(2008,10,1)
--数组对象:
建立数组对象:
格式1: 数组对象名称=new Array([元素个数])
格式2: 数组对象名称=new Array([[元素1][,元素2, …]])
建议使用: 格式3: 数组对象名称=[元素1,元素2, …]
对于不加参数的构造函数, 可以将后面的括号省掉.
数组对象的属性: length表示数组的长度.
数组对象的方法: 格式: 数组对象名称.方法([参数])
join([分隔符])数组元素组合为字符串.
toString(): 以字符串表示数组.
reverse()数组反转.
valueOf()返回数组值.
JavaScript的二维数组:
数组的数组.
字符串对象:
建立字符串对象:
格式:字符串对象名称=new String(字符串常量)
格式:字符串变量名称="字符串常量"
字符串对象的属性:
格式: 字符串对象名称.属性
属性:length字符串长度.
字符串对象的方法:
格式:字符串对象名称.方法。
字符串的方法:
charAt(索引)
indexOf("字串"[,索引])
lastIndexOf("字串"[,索引])
replace("字串1字串2")
search("字串")
substring(索引i[,索引j])
等等
JavaScript中没有类的概念.
自定义对象:
--构造函数定义对象类型.
--建立对象实例.
动态定义对象属性
--构造函数定义对象方法名.
--建立方法的描述函数.
例:
function member(name,gender)
{
this.name = name;
this.gender=gender;
this.display=display; //指定member对象的display方法.
}
function display()
{
var str = this.name + ":" + this.gender;
document.writeln(str + "
");
}
事件处理程序:
浏览响应某个事件, 实现用户的交互操作而进行的处理(过程).
事件处理程序的调用: 浏览器等待用户的交互操作,并在事件发生时,自动调用事件处理程序(函数), 完成事件处理过程.
定时器: 用以指定在一段特定的时间后执行某段程序.
setTimeout():
格式:
[定时器对象名=]setTimeout("<表达式>",毫秒)
功能: 执行<表达式>一次.
setInterval():
格式:
[定时器对象名=]setInterval("<表达式>毫秒)
功能: 重复执行<表达式>, 直至窗口,框架被关闭或执行clearInterval.
clearInterval(): 终止定时器.
格式:
clearInterval(定时器对象名)
JavaScript内置对象:
--文件对象(重要)
--锚点对象
--链接对象
--框架对象
--表单对象(重要)
--位置对象
窗口对象:
格式:
[window.]属性
[window.]方法(参数)
opener.属性
opener.方法(参数)
窗口名称.方法(参数)
self.属性
self.方法(参数)
parent.属性
parent.方法(参数)
top.属性
top.方法(参数)
窗口名称.属性
屏幕对象:
--描述屏幕的现实及颜色属性.
屏幕对象的属性:
--格式:screen.属性.
绑定事件的两种方法:
1)
2)
事件对象:
当时间发生时,浏览器自动建立该对象并包含该事件的类型,鼠标坐标等.
事件对象的属性
格式: event.属性
历史对象:
用以存储客户端最近访问的网址清单. 格式:
history.属性
history.方法(参数)
位置对象:
用来代表特定窗口的URL信息.
格式:
location.属性
location.方法(参数)
文件对象: 代表当前HTML对象, 是由
标签组成的, 对每个HTML文件会自动建立一个文件对象.格式:
document.属性.
document.方法(参数)
链接对象
--网页中的链接均会被自动看做链接对象, 并依顺序, 分别表示为document.links[0], document.links[1]…
定义链接对象的格式:
字串.link(属性)
Cookie对象:
是一种以文件(Cookie)的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cookie数据). Cookie文件由所访问的Web站点建立, 以长久的保存客户端与Web站点间的会话数据, 并且该Cookie数据只允许被所访问的Web站点进行读取.
Cookie文件的格式:
NS: Cookie.txt
IE: 用户名@域名.txt
写入Cookie:
格式:
document.cookie = "关键字 = 值 [; expires = 有效日期][;…]"
备注:
1. 有效日期格式: Wdy,DD-Mon-YY HH:MM:SS GMT
2. Wdy/Mon: 英文星期/月份
3. 还包含path, domain, secure属性.
4. 每个Web站点(domain)可建立20个Cookie数据;
5. 每个浏览器可存储300个Cookie数据, 4K字节
6. 客户有权禁止Cookie数据的写入
检查Cookie是否真正的写入到客户端硬盘上:
首先删除IE所有的Cookies
方法:
工具->Internet选项->删除Cookies, 输出文件
保存历史记录在:
C:\\Documents and Settings\ame\\Local Settings\\Temporary Internet Files(win2000)
C:\\Documents and Settings\ame\\Cookies(XP,2003)
有两种类型的cookie:
1)持久性的cookie, 会被保存到客户端的硬盘上.
2)会话Cookie, 不会存储到客户端的硬盘上, 而是放在浏览器进程所处的内存当中, 当浏览器关闭则该会话cookie就销毁了.
在JavaScript中函数的本质就是一个对象
例:
function add(number)
{
alert(number + 20);
}
等同于如下的形式:
var add = function(number)
{
alert(number + 20);
}
当多个函数的名字相同时, 所对应的对象指向最后定义的一个.
在JavaScript中, 没有方法(函数)的概念.
在JavaScript中有一个Function(首字母是大写的)对象, 所有定义的函数都是Function对象类型的.
Function最后的一个参数是函数体的内容,之前的参数作为成员变量.
例如: var add = new Function("number
add(20);调用定义的函数add.
在JavaScript中,每一个函数都有一个隐含的对象arguments, 表示给函数实际(不受声明参数的影响)传递的参数. arguments.length表示实际给函数赋值的个数. JavaScript不支持函数的重载, 但是可以使用arguments属性模拟出函数的重载
function add(number1, number2)
{
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
add(2,3,4)
每一个函数都有一个length属性,表示它期望接受的参数的个数. arguments表示实际接受的参数的个数.
JavaScript中有五种原始数据类型: Undefined, Null, Boolean, Number以及String.
任何变量如果只声明却不给其赋值, 那么该变量就是undefined.
对于Undefined类型只有一个值那就是undefined.
Null数据类型的值只有一个: null.
在JavaScript中只要表达式不返回undefined和null, 那么表达式就真.
Boolean数据类型的值由两个: true和false.
在Javascript中没有char数据类型, 对于字符串,可以使用"'"(单引号)或双引号定义.
可以使用typeof [变量名] 来查看对应变量的原始值. 其返回值有五个: undefined, boolean, string, number, object.
也可以按如下的方法定义字符串:
var s = new String("helloWord"); //
此时alert(typeof s)输出object.
在JavaScript中, 如果函数没有声明返回值, 那么会返回undefined.
null与undefined的关系: undefined实际上是从null派生出来的.
强制类型转换: 在Javascript中, 有三种强制类型转换.
Boolean(value), Number(value), String(value).
在JavaScript中, 对于函数中定义的变量来说, 加var表示局部变量, 不加var表示全局变量.
JavaScript中,所有对象都是从object对象继承过来的. Object中的属性时不可枚举的(propertyIsEnumerable返回false)
对于object对象, 其prototype属性时不可枚举的, (可以通过object.propertyIsEnumerable检测)
在JavaScript中, 可以动态的添加对象的属性, 也可以动态删除对象的属性.
var object = new Object();
alert(object.username);
object["username"]="helloworld";
alert(object.username);
delete object.username;//username属性已经从object对象中删除了.
alert(object.username);
定义对象的另外一种方式: (更常用的必须掌握的方式).
var object = {username:"张山", address: "山东"}
alert(object.username);
alert(object.address);
Javascript中的数组: 第一种方式
var array = new Array();
array.push(1);
array.push(2);
array.push(3);
alert(array.length);
第二种方式:
var array = [1,3,25];
数组的sort()方法: 对数组的内容进行排序. 例子如下:
结果如下:
原因: sort是按照每个字母进行排序的,并不是根据大小.
对于JavaScript数组的sort方法来说,它会线将待排序的内容转化为字符串(调用头toString()方法), 按照字符串的先后顺序进行排序.
可以通过如下的方法增强sort()的功能:
JavaScript中有匿名函数的概念: 只能够在定义的地方使用.
JavaScript中定义对象的几种方式(JavaScript中只有对象的概念, 没有类的概念):
1)基于已有的对象扩充其属性.
缺点: 每次只能使用一个对象, 如果要使用更多对象, 需要重新定义.
2) 工厂方式:
缺点:
每个对象都有方法的备份,因此造成资源的浪费.
改进: 让一个函数让多个对象共享
3)构造函数方式
4)原型("prototype")方式:
单纯的使用原型方式的缺点:
①不能够在构造函数中传参数,只能在对象生成后再去改变属性值.
②会导致程序出错.
对于使用原型定义的对象, 多个对象的属性时共享的.
使用原型方式生成对象, 那么生成的所有对象共享原原型中的属性, 这样一个对象改变了该属性也会反映到其他对象当中.
改进方式: 使用原型+构造函数方式来定义对象, 对象之间的属性互不干扰, 各个对象间共享同一个方法.
5)动态原型方式: 在构造函数中通过标识量让所有对象共享一个方法, 而每个对象拥有自己的属性.
JavaScript中的继承
1)对象冒充的方式.
该种方法可以实现多继承. 但是不推荐.
2)call方法方式:
call是Function对象中的方法, 因此我们定义每个函数都用于该方法. 可以通过函数名来调用call方法, call方法的第一个参数会被传递给函数中的this, 从第二个参数开始, 注意赋值给函数中的参数.
3) 通过apply方法:
4)原型链方式:
5)使用混合方式.
jsUnit详解
JavaScript的编码规范: 通常在JavaScript不希望外界访问的成员和方法名以下划线开始.
jsUnit测试函数的要遵循的规则与Junit3.8类似(比如说测试函数名以test开头等)
对于JsUnit来说, 其setUp和tearDown方法与Junit的运行原理是不同的, Junit中的setUp和tearDown之间是没有关系的, 也就是说不同的测试方法运行在不同的测试对象之中, 而JsUnit的各个测试函数是运行在同一个测试页面中. 因此, setUp和tearDown会针对同一个变量进行操作 下载本文