5.1 JavaScript内部对象
JavaScript中的内部对象按照使用方式可分为动态对象和静态对象。引用动态对象的属性和方法前,必须使用new关键字创建一个对象实例,然后才能使用“对象实例名.成员”的方式来访问其属性和方法;引用静态对象的属性和方法时,不需要用new关键字创建对象实例,直接使用“对象名.成员”的方式来访问其属性和方法即可。
5.1.1 Object对象
Object对象提供了对象的最基本功能,这些功能构成了其他对象的基础;同时还提供了创建自定义对象的简单方式,不需要再定义构造函数。使用Object对象,可以在程序运行时为JavaScript对象随意添加属性,因此可以很容易地创建自定义对象。
1.创建Object对象
语法格式:
obj = new Object([value])
参数说明:
obj:必选项,表示要赋值为Object对象的变量名。
value:可选项,表示任意一种基本数据类型(Number、Boolean或String)。如果value为一个对象,返回不做改动的该对象。如果value为null、undefined或者没有给出,则产生没有内容的对象。
2.Object对象的属性
(1)prototype属性
prototype属性用于返回对象类型原型的引用。
objectName.prototype
参数说明:
objectName:对象的名称。
用prototype属性可以提供对象的类的一组基本功能。对象的新实例将“继承”赋予该对象原型的操作。
例如,为Array对象添加返回数组中最大元素值的方法是:声明该函数,将它加入Array.prototype,并使用它。
该代码执行后,y将保存数组x中的最大值,即6。
JavaScript固有对象都有只读的prototype属性,可以像该例中那样为原型添加功能,但不能被赋予不同的原型。用户定义的对象可以被赋予新的原型。
(2)constructor属性
constructor属性用于创建对象的函数。
object.constructor
参数说明:
object:必选项,是对象或函数的名称。
constructor属性是所有具有prototype的对象的成员,包括除Global和Math对象以外的所有JavaScript固有对象。constructor属性保存了对构造特定对象实例的函数的引用,例如:
x = new String("Hi"); if(x.constructor == String) //进行处理(条件为真)
或
3.Object对象的方法
(1)toLocaleString()方法
toLocaleString()方法用于返回一个日期,该日期使用当前区域设置并已被转换为字符串。
dateObj.toLocaleString()
参数说明:
dateObj:必选项,可为任意的Date对象。
toLocaleString()方法返回一个String对象,该对象中包含了以当前区域设置的默认格式表示的日期。
公元1601—1999年的时间、日期格式,应按照用户控制面板中的区域设置来确定。
此区间外的其他时间,使用toString()方法的默认格式。
例如,同样是1月5日,在美国,toLocaleString()可能会返回"01/05/96 00:00:00";而在欧洲,返回值则可能是"05/01/96 00:00:00",因为欧洲的惯例是将日期放在月份前面。
注意
toLocaleString()通常用来显示结果给用户。不要在脚本中用来做基本计算,因为返回的结果是因机器而异的。
(2)toString()方法
toString()方法用于返回对象的字符串表示。
objectname.toString([radix])
参数说明:
objectname:必选项,表示要得到字符串表示的对象。
radix:可选项,指定将数字值转换为字符串时的进制。
toString()方法是所有JavaScript内部对象的成员方法,其操作依赖于对象的类型,如表5.1所示。
表5.1 toString()方法的对象及其相应操作
(3)valueOf()方法
valueOf()方法用于返回指定对象的原始值。
object.valueOf()
参数说明:
object:必选项,表示是任意固有的JavaScript对象。不同JavaScript固有对象的valueOf()方法定义也不同,如表5.2所示。
表5.2 JavaScript固有对象的valueOf()方法定义
5.1.2 String对象
String对象是动态对象,需要创建对象实例后才能引用该对象的属性和方法。String对象主要用于处理和格式化文本字符串,以及确定和定位字符串中的子字符串。
1.创建String对象
String对象用于操作和处理文本串。通过该对象,可以获取字符串长度,提取子字符串,以及将字符串转换为大写或小写字符。
语法格式:
var newstr=new String(StringText)
参数说明:
newstr:创建的String对象名。
StringText:可选项,表示字符串文本。
例如,创建一个String对象。
var newstr=new String("欢迎使用JavaScript脚本")
事实上,任何一个字符串常量(用单引号或双引号括起来的字符串)都是一个String对象,可以将其直接作为对象来使用。只要在字符串变量的后面加“.”,便可以直接调用String对象的属性和方法。字符串与String对象的不同在于返回的typeof值,前者返回的是String类型,后者返回的是Object类型。
2.String对象的属性
String对象有3个属性,分别是length、constructor和prototype。下面对这几个属性进行详细介绍。
(1)length属性
length属性用于获得当前字符串的长度。
语法格式:
stringObject.length
参数说明:
stringObject:当前获取长度的String对象名,也可以是字符串变量名。
例如,获取已创建的字符串对象“abcdefg”的长度,代码如下:
运行结果:
7
例如,获取自定义的字符串变量“abcdefg”的长度,代码如下:
运行结果:
7
(2)constructor属性
constructor属性用于引用当前对象的函数。
语法格式:
Object.constructor
参数说明:
Object:String对象名或字符变量名。
例如,使用constructor属性判断当前对象或自定义变量的类型,代码如下:
运行结果:
this is String
说明
上述示例中的newName对象,可以用字符串变量代替。该属性是一个公共属性,在Array、Date、Boolean和Number对象中都可以调用该属性,用法与String对象相同。
例如,可以利用constructor属性获取当前对象fred所引用的函数代码。
运行结果:
function chronicle(name,year) { this.name=name; this.year=year; }
(3)prototype属性
prototype属性可以为对象添加属性和方法。
语法格式:
object.prototype.name=value
参数说明:
object:对象名或字符变量名。
name:要添加的属性名或方法名。
value:添加属性的值或执行方法的函数。
例如,给information对象添加一个自定义属性salary,并给该属性赋值(1700),代码如下:
运行结果:
1700
说明
salary属性也是一个公共属性,在Array、Date、Boolean和Number对象中都可以调用该属性,用法与String对象相同。
3.String对象的方法
String对象的方法如表5.3所示。
表5.3 String对象的方法
说明
String对象中的方法与属性,字符串变量也可以使用。为了便于读者用字符串变量执行String对象中的方法与属性,下面的例子都用字符串变量进行操作。
5.1.3 Date对象
在Web开发过程中,可以使用JavaScript的Date对象(日期对象)实现对日期和时间的控制。例如,想在网页中显示计时时钟,就需要重复生成新的Date对象,来获取当前计算机的时间。用户可以使用Date对象执行各种日期和时间操作。
1.创建Date对象
日期对象用于对一个对象数据类型求值,该对象主要负责处理与日期和时间有关的数据信息。在使用Date对象前,首先要创建该对象。
语法格式:
dateObj = new Date() dateObj = new Date(dateVal) dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]])
Date对象语法中各参数的说明如表5.4所示。
表5.4 Date对象的参数说明
下面通过几个示例介绍如何创建日期对象。
例如,返回当前的日期和时间。
var newDate=new Date(); document.write(newDate);
运行结果:
Wed May 15 2019 11:02:38 GMT+0800 (中国标准时间)
例如,用年、月、日(2019-6-6)来创建日期对象,代码如下:
var newDate=new Date(2019,6,6); document.write(newDate);
运行结果:
Sat Jul 06 2019 00:00:00 GMT+0800 (中国标准时间)
例如,用年、月、日、小时、分钟、秒(2019-6-6 19:18:50)来创建日期对象,代码如下:
var newDate=new Date(2019,6,6,19,18,50); document.write(newDate);
运行结果:
Sat Jul 06 2019 19:18:50 GMT+0800 (中国标准时间)
例如,以字符串形式创建日期对象(2019-6-6 19:41:40),代码如下:
var newDate=new Date("Jul 6,2019 19:41:40"); document.write(newDate);
运行结果:
Sat Jul 06 2019 19:41:40 GMT+0800 (中国标准时间)
2.Date对象的属性
Date对象的属性包括constructor和prototype,其语法格式与String对象中相同。这里介绍这两个属性的用法。
(1)constructor属性
例如,判断当前对象是否为日期对象,代码如下:
var newDate=new Date(); if(newDate.constructor==Date) document.write("日期型对象");
运行结果:
日期型对象
(2)prototype属性
例如,用自定义属性来记录当前日期是本周的周几,代码如下:
运行结果:
3
3.Date对象的方法
Date对象是JavaScript的一种内部对象。该对象没有可以直接读写的属性,所有对日期和时间的操作都是通过方法来完成的。Date对象的方法如表5.5所示。
表5.5 Date对象的方法
续表
5.1.4 event对象
JavaScript的event对象用来描述JavaScript的事件,主要作用于IE和NN4以后的各个浏览器版本中。event对象代表事件状态,如事件发生的元素、键盘状态、鼠标位置和鼠标按钮状态。一旦事件发生,便会生成event对象。例如,单击一个按钮,浏览器的内存中就会产生相应的event对象。
1.在IE中引用event对象
在IE中,event对象作为window对象的一个属性,被使用和访问。
window.event
由于window引用部分是可选的,因此脚本可像全局引用一样使用event对象。
event.propertyName
在不进行特殊预处理和初始化的情况下,事件处理程序的任何语句都可以访问event对象。
2.在W3C中引用event对象
在W3C事件模型中,event对象的引用比较复杂。在多数情况下,必须明确地将event对象作为一个参数传递到事件处理函数中。event对象也可自动作为参数传递,这取决于事件处理函数与对象绑定的方式。
如果使用原始方法将事件处理函数与对象绑定(通过元素标记的一个属性),则必须把event对象作为参数进行传递,例如:
onKeyUp= "example(event)"
这是W3C模型中唯一可像全局引用一样明确引用event对象的方式。这个引用只作为事件处理函数的参数,在别的内容中不起作用。如果有多个参数,则event对象引用可以以任意顺序排列,例如:
onKeyUp= "example(this,event)"
与元素绑定的函数定义中,应该有一个参数变量来“捕获”event对象参数,例如:
function example(widget,evt){…}
注意
这个参数变量名称没有限制,在本书的例子中使用event对象或evt。但在跨浏览器的脚本中,应避免用event作为参数变量名,否则将与IE的event属性相冲突。
还可以通过其他方式将事件处理函数绑定到对象(在NN6以后的浏览器版本中,使用属性赋值和W3C DOM的addEventListener()方法),将这些事件处理函数的引用赋给文档中所需的对象,例如:
document.forms[0].someButton. onkeyup= example; document.getElementById("myButton").addEventListener("keyup",example,false);
通过这些方式进行事件绑定,可以防止自己的参数直接到达调用的函数,但是,W3C浏览器自动传送event对象的引用并将它作为唯一参数,这个event对象是为响应激活事件的用户或系统行为而创建的,也就是说,函数需要用一个参数变量来接收传递的event对象。
function example(evt){…}
事件对象包含作为事件目标的对象(如包含表单控件对象的表单对象)的引用,从而可以访问该对象的任何属性。
3.event对象的属性
(1)altLeft属性
altLeft属性用于设置或获取左Alt键的状态。检索左Alt键的当前状态,返回值为true表示关闭,为false表示不关闭。
语法格式:
[window.]event. altLeft
由于altLeft属性是Boolean值,因此可以将该属性应用到if语句中,根据获取的值执行不同的操作。
(2)ctrlLeft属性
ctrlLeft属性设置或获取左Ctrl键的状态。检索左Ctrl键的当前状态,返回值为true表示关闭,为false表示不关闭。
语法格式:
[window.]event. ctrlLeft
由于ctrlLeft属性是Boolean值,因此可以将该属性应用到if语句中,根据获取的值执行不同的操作。
(3)shiftLeft属性
shiftLeft属性设置或获取左Shift键的状态。检索左Shift键的当前状态,返回值true表示关闭,false表示不关闭。
语法格式:
[window.]event. shiftLeft
由于这3个属性的值都是Boolean类型的,因此可以将它们组合成一个条件在if语句中应用,并且可以和altKey、ctrlKey及shiftKey属性同时使用。
【例5.1】 下面将altKey、ctrlKey和shiftKey属性组成一个综合的条件,应用if语句判断当Ctrl键、Shift键和Alt键同时被按下时执行一个操作。运行结果如图5.1所示。(实例位置:资源包\TM\sl\5\01)
图5.1 altKey、ctrlKey和shiftKey属性的综合应用
在本实例中,创建一个自定义函数example(),通过window.event获取Ctrl键、Shift键和Alt键的值,并应用if语句判断Ctrl键、Shift键和Alt键是否同时被按下。如果是,则执行alert中的内容和window.location.href超链接的文件,代码如下:
(4)button属性
button属性用于获取事件发生时用户所按的鼠标键。
语法格式:
[window.]event.button
该属性的值和说明如下:
0:按下鼠标左键。
1:按下鼠标中键。
2:按下鼠标右键。
【例5.2】 在浏览网页的过程中,经常会应用鼠标右键进行快捷键操作。为了提高网站的安全性和有效地利用资源,可以在页面中添加右击自动链接到指定网站的功能。在本实例中,实现在页面中的任何位置右击都将弹出“明日科技欢迎您”对话框,单击“确定”按钮后将进入到明日科技网站的首页。运行结果如图5.2所示。(实例位置:资源包\TM\sl\5\02)
图5.2 右击弹出提示信息
这里主要应用的是event对象中的button属性,判断当鼠标右键被按下时弹出提示对话框,单击“确定”按钮后跳转到明日科技网站的首页,程序代码如下:
(5)clientX属性
clientX属性用于获取鼠标在浏览器窗口中的X坐标。这是一个只读属性,即只能获取鼠标的当前位置,不能改变鼠标的位置。
语法格式:
[window.]event. clientX
(6)clientY属性
clientY属性用于获取鼠标在浏览器窗口中的Y坐标。这是一个只读属性,即只能获取鼠标的当前位置,不能改变鼠标的位置。
语法格式:
[window.]event. clientY
【例5.3】 设计一个文字跟随鼠标移动的实例。当鼠标指针移动到文字上方时,拖动鼠标即可使工作区中的文字跟随鼠标移动。运行结果如图5.3所示。(实例位置:资源包\TM\sl\5\03)
图5.3 跟随鼠标移动的文字
本实例中,应用document对象中的onmousedown、onmousemove和onmouseup事件来对文字进行移动控制,应用event对象中的clientX和clientY属性获取鼠标在当前工作区中的位置,应用event对象中的srcElement属性获取当前事件的对象。在自定义函数move()中,还应用event对象的button属性判断当前鼠标是否为左键按下状态,代码如下:
(7)X属性
X属性用于设置或获取鼠标指针位置相对于CSS有position属性的上级元素的X轴坐标。如果CSS属性中没有position属性的上级元素,默认以body元素作为参考对象。
语法格式:
[window.]event. X
如果鼠标事件触发后,鼠标指针移出窗口外,则返回值为-1。这是一个只读属性,只能通过它获取鼠标的当前位置,但不能用它来更改鼠标的位置。
(8)Y属性
Y属性用于设置或获取鼠标指针位置相对于CSS有position属性的上级元素的Y轴坐标。如果CSS属性中没有position属性的上级元素,默认以body元素作为参考对象。
语法格式:
[window.]event. Y
如果鼠标事件触发后,鼠标指针移出窗口外,则返回值为-1。这是一个只读属性,只能通过它获取鼠标的当前位置,但不能用它来更改鼠标的位置。
【例5.4】 在本实例中创建一个可以在页面中移动的窗体,并可对窗体执行关闭操作。运行结果如图5.4所示。(实例位置:资源包\TM\sl\5\04)
图5.4 X和Y属性在动态移动层中的运用
本实例在用鼠标按住要移动的层时,将层的名称赋给了一个变量,并用该变量对层进行移动的操作。如果直接用层的名称来对层进行移动,将会选中层后面的一些信息。其中通过event对象中的X和Y属性在要移动的层上拖动鼠标,来改变当前层的位置。
①在页面中添加两个层,并且其中一个层包含另一个层。在div1层的鼠标按下事件onmousedown触发时调用自定义函数div_down()。
②编写用于实现动态移动层的JavaScript代码。创建自定义函数div_down(),获取当前鼠标与层左边界和上边界的距离。
③创建自定义函数div_move(),用于移动层的位置。
④创建自定义函数div_up(),当松开鼠标时释放对当前层的控制。
function div_up(){Obj="none";}
创建自定义函数hide(),以动态效果隐藏层。
⑤在页面上移动鼠标时,通过页面的onmousemove事件调用自定义函数div_move()。
document.onmousemove=div_move();
⑥在页面上松开鼠标时,通过页面的onmouseup事件调用自定义函数div_up()。
document.onmouseup=div_up();
(9)cancelBubble属性
cancelBubble属性检测是否接受上层元素的事件控制。如果该属性的值是false,则允许被上层元素的事件控制;值为true,则不被上层元素的事件控制。
语法格式:
[window.] event.cancelBubble[ = cancelBubble]
该属性的值是一个可读写的布尔值,默认值为false。
(10)srcElement属性
srcElement属性用于设置或获取触发事件的对象。srcElement属性是事件初始目标的HTML元素对象引用。由于事件通过元素容器层次进行处理,且可以在任何一个层次进行处理,因此由一个属性指向产生初始事件的元素是很有帮助的。
语法格式:
[window.]event. srcElement
通过该属性可以读、写属于该元素的属性,并调用它的任何方法。
【例5.5】 在浏览网页中的表格数据时,有时会忘记浏览到的位置。这时可以用鼠标选中已经读取到的数据,并改变表格中单元格的背景颜色,从而记录数据读取的位置,便于以后继续浏览。运行结果如图5.5所示。(实例位置:资源包\TM\sl\5\05)
图5.5 选中表格中的单元格
该功能的实现主要通过onclick事件,应用event对象中的srcElement属性获取发生事件的文档元素,并将其保存到变量e中。然后应用e.tagName(获取当前位置的标志名称)判断发生事件的文档元素是否在表格的单元格上,并用变量e的style样式的color和backgroundColor属性来改变当前单元格的前景色和背景色,其中还应用了event对象中的cancelBubble属性,防止向下一个外层对象冒泡。最后应用了window对象中的lastSelection属性,获取最后一次选中的单元焦点。
①创建自定义函数select(),保存发生事件的文档元素信息,代码如下:
②创建自定义函数findcell(),用于判断选中的位置是否是单元格,代码如下:
③创建自定义函数selectroworcell(),用于改变单元格的前景色和背景色,代码如下:
④创建自定义函数deselectroworcell(),用于将前景色和背景色恢复正常,代码如下:
5.1.5 FileSystemObject对象
在JavaScript中实现文件操作功能,主要是依靠FileSystemObject对象。该对象用来创建、删除和获得有关信息,还可以用来操作驱动器、文件夹及文件的方法和属性。下面对该对象所包含的对象和集合进行说明,如表5.7所示。
表5.7 FileSystemObject对象的对象/集合
1.动态创建FileSystemObject对象
要想对文件进行相应的操作,首先需要对FileSystemObject对象进行实例化,也就是动态创建FileSystemObject对象。
语法格式:
fso = new ActiveXObject("Scripting.FileSystemObject");
参数说明:
fso:是FileSystemObject对象的一个实例。
在动态实例化FileSystemObject对象后,可以用实例化变量fso对Drive对象、Drives集合、File对象、Files集合、Folder对象、Folders集合和TextStream对象进行相应的操作。
2.FileSystemObject对象的方法
(1)GetAbsolutePathName()方法
GetAbsolutePathName()方法根据提供的路径返回完整的路径,也就是说,如果路径提供了从指定驱动器的根开始的完整的引用,那么它就是明确和完整的。如果路径指定的是映射驱动器的根文件夹,那么完整的路径将只能由一个路径分隔符“\”结束。
语法格式:
object.GetAbsolutePathName(pathspec)
参数说明:
object:必选项,表示FileSystemObject对象的名称。
pathspec:必选项,表示完整路径的路径说明。该参数的相应设置及说明如表5.8所示。
表5.8 pathspec参数的说明
在表5.8中,pathspec参数中的c并不是指的c盘,而是服务器端当前路径的盘符。假设当前路径为“d:\word\javascript”,下面对GetAbsolutePathName()方法的应用进行说明。
例如,获取当前路径的上一级目录,代码如下:
var fso=new ActiveXObject("Scripting.FileSystemObject"); var driv=fso.GetAbsolutePathName("d:..");
运行结果:
d:\word
例如,获取当前路径的下一个文件夹nn的完整路径,代码如下:
var fso=new ActiveXObject("Scripting.FileSystemObject"); var driv=fso.GetAbsolutePathName("nn");
运行结果:
d:\word\javascript\nn
(2)GetBaseName()方法
GetBaseName()方法将以字符串的形式返回指定路径中最后成分的基本名称,不包含文件扩展名。
语法格式:
object.GetBaseName(path)
参数说明:
object:必选项,表示FileSystemObject对象的名称。
path:必选项,表示返回其最后成分中基本名称的指定路径。当路径与path参数不匹配时,GetBaseName()方法将返回长度为零的空字符串。
注意
GetBaseName()方法只作用于所提供的path字符串。它不解析路径,也不检查指定路径是否存在。该方法所获取的最后成分的基本名称不一定是文件名,也可以是文件夹的名称。
例如,获取“d:\word\javascript\mycolor.htm”路径中最后成分的文件名称mycolor,代码如下:
(3)GetDriveName()方法
GetDriveName()方法根据指定路径返回包含驱动器名称的字符串。
语法格式:
object.GetDriveName(path)
参数说明:
object:必选项,表示FileSystemObject的名称。
path:必选项。路径说明,将根据其中成分返回驱动器名称。
注意
GetDriveName()方法不试图解析路径,也不检查指定路径是否存在。该方法无法确定驱动器时,将返回一个指定字符串。
(4)GetDrive()方法
GetDrive()方法用于返回指定路径中驱动器的Drive对象。
语法格式:
object.GetDrive(drivespec);
参数说明:
object:必选项,表示FileSystemObject的名称。
drivespec:必选项。该参数可以是驱动器号(c)、带冒号的驱动器号(c:)、带冒号和路径分隔符的驱动器号(c:\),或者任意网络共享的说明(\\computer2\share1)。
例如,获取“d:\word\javascript”路径中的盘符“d:”,并以驱动器的“D:”形式进行显示,代码如下:
<script language="javascript"> function GetDriveLetter(path) { var fso, s =""; fso = new ActiveXObject("Scripting.FileSystemObject"); s += fso.GetDrive(fso.GetDriveName(path)); alert(s); } GetDriveLetter("d:\\word\\javascript"); </script>
(5)GetExtensionName()方法
GetExtensionName()方法用于返回指定路径中最后成分扩展名的字符串。
语法格式:
object.GetExtensionName(path)
参数说明:
object:必选项,表示FileSystemObject的名称。
path:必选项,表示返回其扩展名的指定路径。
注意
对于网络驱动器,根目录“\”将被认为是一个成分。如果没有和path参数匹配的成分,那么GetExtensionName()方法将返回长度为零的空字符串。
例如,获取“d:\word\javascript\nn.text”目录中nn文件的扩展名text,代码如下:
(6)GetFileName()方法
GetFileName()方法用于返回指定路径的最后成分,指定的路径可以是驱动器说明,也可以是共享路径。
语法格式:
object.GetFileName(pathspec)
参数说明:
object:必选项,表示FileSystemObject的名称。
pathspec:必选项,表示文件的路径(绝对或相对路径)。
例如,获取“d:\word\javascript\nn.text”路径中的文件名称nn.text,代码如下:
(7)GetParentFolderName()方法
GetParentFolderName()方法根据指定路径中的最后成分,返回其父文件夹名称的字符串。
语法格式:
object.GetParentFolderName(path)
参数说明:
object:必选项,表示FileSystemObject的名称。
path:必选项,表示文件名所在的完整路径。
注意
GetParentFolderName()方法只作用于所提供的path字符串。它不试图解析路径,也不检查指定路径是否存在。该方法所获取的最后成分没有父文件夹时,将返回长度为零的空字符串。
(8)GetSpecialFolder()方法
GetSpecialFolder()方法返回指定的特殊文件夹对象。
语法格式:
object.GetSpecialFolder(folderspec)
参数说明:
object:必选项,表示FileSystemObject的名称。
folderspec:必选项,表示要返回的特殊文件夹的名称。该参数的相关设置如表5.9所示。
表5.9 folderspec参数的相关设置
(9)GetTempName()方法
GetTempName()方法用于返回一个随机产生的临时文件或文件夹名,常用于执行那些需要临时文件或文件夹的操作。
语法格式:
object.GetTempName();
参数说明:
object:必选项,表示FileSystemObject的名称。
说明
GetTempName()方法并不创建文件。它只提供一个临时文件名,可以通过CreateTextFile()方法来创建文件。
【例5.6】 创建临时文件。(实例位置:资源包\TM\sl\5\06)
本实例通过CreateTempFile()方法来随机创建一个临时文件夹,然后用GetTempName()方法获取临时文件夹的路径,最后用CreateTextFile()方法在临时文件夹中创建一个临时文件,代码如下:
5.1.6 Drive对象
Drive对象负责收集系统中物理或逻辑驱动器的相关资源内容,如驱动器的共享名和有多少可用空间等。在使用该对象时,不一定非要把驱动器实物地连接到系统上,也可以通过网络在逻辑上进行连接。需要说明的是,在这里所说的驱动器不一定是硬盘,也可以是RAM磁盘等。
1.动态创建Drive对象
使用Drive对象获取驱动器的相关信息前,必须先创建Drive对象。Drive对象可通过FileSystemObject对象的GetDrive()方法来创建。
例如,对C盘驱动器创建一个Drive对象,代码如下:
var fso=new ActiveXObject("Scripting.FileSystemObject"); var s=fso.GetDrive("C:\\");
2.Drive对象的属性
(1)FreeSpace属性
FreeSpace属性用于返回指定驱动器或网络共享上可用空间的大小,为只读属性。
语法格式:
object.FreeSpace
参数说明:
object:为Drive对象。
说明
通常情况下,由FreeSpace属性返回的值和由AvailableSpace属性返回的值是相同的。对于支持quotas的计算机系统来说,两者有可能不同。
(2)IsReady属性
IsReady属性用于判断当前驱动器是否可用。如果指定驱动器已就绪,则返回true,否则返回false。
语法格式:
object.IsReady
参数说明:
object:为Drive对象。
说明
对于可移动媒体的驱动器和CD-ROM驱动器来说,IsReady只有在插入了适当的媒体并已准备好访问时才返回true。
(3)TotalSize属性
TotalSize属性以字节为单位返回驱动器或网络共享的总空间大小。
语法格式:
object.TotalSize
参数说明:
object:为Drive对象。
【例5.7】 显示指定驱动器的大小及可用空间。(实例位置:资源包\TM\sl\5\07)
本实例通过Drive对象的IsReady属性来判断当前驱动器是否可用,当驱动器存在时,用TotalSize和FreeSpace属性来计算驱动器的大小及可用空间。运行结果如图5.6所示。
图5.6 显示指定驱动器的大小及可用空间
代码如下:
(4)DriveType属性
DriveType属性返回一个值,表示所指定驱动器的类型。
语法格式:
object.DriveType
参数说明:
object:为Drive对象。
(5)SerialNumber属性
SerialNumber属性返回连续的十进制数字,用于唯一标识磁盘卷。
语法格式:
object.SerialNumber
参数说明:
object:为Drive对象。
说明
可以使用SerialNumber属性来确保在带有可移动媒体的驱动器中插入正确的磁盘。
【例5.8】 显示指定驱动器的类型及系列号。(实例位置:资源包\TM\sl\5\08)
本实例通过Drive对象的DriveType属性来获取当前驱动器的类型,用SerialNumber属性来获取驱动器的系列号。运行结果如图5.7所示。
图5.7 显示指定驱动器的类型及系列号
代码如下:
(6)AvailableSpace属性
AvailableSpace属性用于返回在所指定驱动器或网络共享上可用空间的大小。
语法格式:
object.AvailableSpace
参数说明:
object:为Drive对象。
在通常情况下,AvailableSpace属性与FreeSpace属性返回的值是一样的。但是对于支持quotas的计算机系统来说,返回值可能会有所不同。
(7)FileSystem属性
FileSystem属性用于返回指定驱动器所使用的文件系统的类型。
语法格式:
object.FileSystem
参数说明:
object:为Drive对象。
说明
可能的返回类型包括FAT、NTFS和CDFS。
(8)Path属性
Path属性用于返回指定文件、文件夹或驱动器的路径。
语法格式:
object.Path
参数说明:
object:为File、Folder或Drive对象。
说明
驱动器字母后不包括根驱动器,例如,C驱动器的路径是“C:”,而不是“C:\”。
(9)RootFolder属性
RootFolder属性返回一个Folder对象,表示指定驱动器的根文件夹,这是一个只读属性。
语法格式:
object.RootFolder
参数说明:
object:为Drive对象。
说明
可以通过返回的Folder对象来访问驱动器上的所有文件和文件夹。
(10)ShareName属性
ShareName属性用于返回指定驱动器的网络共享名。
语法格式:
object.ShareName
参数说明:
object:为Drive对象。
说明
如果object不是网络驱动器,那么ShareName属性将返回长度为零的字符串(" ")。
(11)VolumeName属性
VolumeName属性用于设置或返回指定驱动器的卷名、读/写属性。
语法:
object.VolumeName[= newname]
参数说明:
object:必选项,表示Drive对象的名称。
newname:可选项。如果提供了该参数,newname将成为指定object的新名称。
5.1.7 File对象
File对象可以获取服务器端指定文件的相关属性(如文件的创建、修改、访问时间),也可以对文件或文件夹进行复制、移动、删除等操作。
1.动态创建File对象
使用File对象对指定文件的属性进行访问前,首先要创建File对象。File对象可通过FileSystemObject对象的GetFile()方法来创建。
GetFile()方法根据指定路径中的文件,返回相应的File对象。
语法格式:
object.GetFile(filespec)
参数说明:
object:必选项,表示FileSystemObject的名称。
filespec:必选项,表示指定文件的路径(绝对或相对路径)。
注意
如果指定的文件不存在,则出错。
例如,将qq.txt文件以File对象进行实例化,代码如下:
var fso=new ActiveXObject("Scripting.FileSystemObject"); var s=fso.GetFile("E:\\word\\JavaScript\\qq.txt");
2.File对象的方法
(1)Copy()方法
Copy()方法用于将指定文件或文件夹从一个位置复制到另一位置。
语法格式:
object.Copy(destination[, overwrite]);
参数说明:
object:必选项,表示File或Folder对象的名称。
destination:必选项。复制文件或文件夹的目标位置,不允许含通配字符。
overwrite:可选项,Boolean值。如果要覆盖已有的文件或文件夹,为true(默认),否则为false。
(2)Delete()方法
Delete()方法用于删除指定的文件或文件夹。
语法格式:
object.Delete(force);
参数说明:
object:必选项,表示File或Folder对象的名称。
force:可选项,Boolean值。如果要删除设置了只读属性的文件或文件夹,为true,否则为false(默认)。
说明
①如果指定的文件或文件夹不存在,将会产生一个错误。
②Delete()方法对单个File或Folder操作的结果和使用FileSystemObject.DeleteFile()或FileSystemObject.DeleteFolder()方法所执行的操作结果一样。
③Delete()方法对于文件夹是否为空不做区分。删除指定的文件夹时,一般不考虑其是否包含了内容。
(3)Move()方法
Move()方法用于将指定文件或文件夹从一个位置移动到另一个位置。
语法格式:
object.Move(destination);
参数说明:
object:必选项,表示File或Folder对象的名称。
destination:必选项,表示移动文件或文件夹的目标位置,不允许含通配字符。
说明
Move()方法对单个File或Folder操作的结果和使用FileSystemObject.MoveFile()或FileSystemObject.MoveFolder()方法所执行的操作结果一样。需要注意的是,后两种替换方法能够移动多个文件或文件夹。
【例5.9】 对文件进行复制、删除或移除的操作。(实例位置:资源包\TM\sl\5\09)
本实例是通过File对象的Copy()、Delete()和Move()方法来实现文件的复制、删除和移除操作。运行结果如图5.8所示。
图5.8 对文件进行复制、删除或移除的操作
代码如下:
(4)OpenAsTextStream()方法
OpenAsTextStream()方法用于打开指定的文件并返回一个TextStream对象,通过该对象可以对文件进行读、写或追加。
语法格式:
object.OpenAsTextStream([iomode, [format]])
参数说明:
object:必选项,表示File对象的名称。
iomode:可选项,表示输入/输出的模式,可以是ForReading、ForWriting或ForAppending。
format:可选项,表示使用三态值中的一个来指明打开文件的格式。如果忽略,文件将以ASCII格式打开。
iomode参数可以是表5.10中的任意一种。
表5.10 iomode参数
format参数可以是表5.11中的任意一种。
表5.11 format参数
说明
OpenAsTextStream()方法提供的功能和FileSystemObject的OpenTextFile()方法一样。另外,OpenAsTextStream()方法还可以用来写文件。
【例5.10】 修改指定文件中的内容。(实例位置:资源包\TM\sl\5\10)
本实例通过File对象的OpenAsTextStream()方法读取指定文件中的信息,并显示在文本框中,也可以通过该方法用指定文本信息修改或追加指定路径下的文件,结果如图5.9和图5.10所示。
图5.9 读取指定文件中的信息
图5.10 将文本追加到指定文件中
代码如下:
3.File对象的属性
(1)Attributes属性
Attributes属性用于设置或返回文件或文件夹的属性,一般为读/写或只读。
语法格式:
object.Attributes [= newattributes]
参数说明:
object:必选项,表示File或Folder对象的名称。
newattributes:可选项。如果提供了该参数,那么newattributes将成为指定object的新属性值。newattributes参数可以是表5.12中的值或者这些值的任意逻辑组合。
表5.12 newattributes参数值
【例5.11】 将只读文件改为可写文件。(实例位置:资源包\TM\sl\5\11)
本实例通过File对象的Attributes属性来获取指定文件是只读、隐藏,还是系统文件等。当为只读文件时,通过提示框将其改为可写文件。运行结果如图5.11所示。
图5.11 将只读文件改为可写文件
代码如下:
(2)DateCreated属性
DateCreated属性用于返回指定文件或文件夹的创建日期和时间,一般为只读。
语法格式:
object.DateCreated
参数说明:
object:表示File或Folder对象。
(3)DateLastAccessed属性
DateLastAccessed属性用于返回最后访问指定文件或文件夹的日期和时间,一般为只读。
语法格式:
object.DateLastAccessed
参数说明:
object:表示File或Folder对象。
注意
该方法的操作依赖于底层的操作系统。如果操作系统不支持提供时间信息,那么将不会返回任何信息。
(4)DateLastModified属性
DateLastModified属性用于返回最后修改指定文件或文件夹的日期和时间,一般为只读。
语法格式:
object.DateLastModified
参数说明:
object:表示File或Folder对象。
【例5.12】 获取指定文件的创建、修改及访问时间。(实例位置:资源包\TM\sl\5\12)
本实例通过File对象的DateCreated、DateLastAccessed和DateLastModified属性来获取指定文件的创建、修改和访问时间,然后使用Date对象的toLocaleString()方法将日期转换成标准形式,显示在提示框中。运行结果如图5.12所示。
图5.12 获取指定文件的创建、修改及访问时间
代码如下:
注意
以上实例也可以显示E:\word\JavaScript\qq.txt路径中JavaScript文件夹的创建、修改和访问时间。具体操作是在“var d=f.DateCreated;”语句前添加“f=f.ParentFolder语句;”,用于获取当前路径的父级文件夹对象,当再执行时,获取的是JavaScript文件夹中的日期。
(5)Name属性
Name属性用于设置或返回指定文件或文件夹的名称,一般为读/写。
语法格式:
object.Name [= newname]
参数说明:
object:必选项,表示File或Folder对象的名称。
newname:可选项。如果提供了该参数,newname将成为指定的object的新名称。
(6)Size属性
对于文件,Size属性以字节为单位返回指定文件的大小。对于文件夹,Size属性以字节为单位返回文件夹中包含的所有文件和子文件夹的大小。
语法格式:
object.Size
参数说明:
object:表示File或Folder对象。
(7)Type属性
Type属性用于返回关于文件或文件夹类型的信息,例如,对于以.txt结尾的文件将返回文本文档。
语法格式:
object.Type
参数说明:
object:表示File或Folder对象。
【例5.13】 获取指定文件的大小。(实例位置:资源包\TM\sl\5\13)
本实例通过File对象的Size属性获取指定文件的大小,并用Name和Type属性来显示当前路径中文件的名称及类型。运行结果如图5.13所示。
图5.13 获取指定文件的大小
代码如下:
(8)ShortName属性
ShortName属性用于返回短名称,这些短名称由8.3命名规则的程序使用。
语法格式:
object.ShortName
参数说明:
object:表示File或Folder对象。
(9)Drive属性
Drive属性用于返回指定文件或文件夹所在驱动器的驱动器号,一般为只读。
语法格式:
object.Drive
参数说明:
object:表示File或Folder对象。
(10)ParentFolder属性
ParentFolder属性用于返回指定文件或文件夹的父文件夹对象。只读。
语法格式:
object.ParentFolder
参数说明:
object:表示File或Folder对象。
(11)Path属性
Path属性用于返回指定文件、文件夹或驱动器的路径。
语法格式:
object.Path
参数说明:
object:表示File、Folder或Drive对象。
驱动器字母后不包括根驱动器。例如,C驱动器的路径是“C:”,而不是“C:\”。
(12)ShortPath属性
ShortPath属性返回短路径名,这些短路径名由8.3文件命名规则的程序使用。
语法格式:
object.ShortPath
参数说明:
object:表示File或Folder对象。
5.1.8 Folder对象
Folder对象可以获取服务器端指定文件夹的相关属性,它与File对象的实现过程类似。只是Folder对象针对的是文件夹,File对象针对的是文件。
1.动态创建Folder对象
使用Folder对象对指定文件夹的属性进行访问前,首先必须要创建Folder对象,一般可通过FileSystemObject对象的GetFolder()方法来创建。
GetFolder()方法可根据指定的路径中的文件返回相应的Folder对象。
语法格式:
object.GetFolder(filespec)
参数说明:
object:必选项,表示FileSystemObject的名称。
filespec:必选项,表示指定文件夹的路径(绝对或相对路径)。
注意
如果指定的文件不存在,则出错。
例如,将qq.txt文件以File对象进行实例化,代码如下:
var fso=new ActiveXObject("Scripting.FileSystemObject"); var s=fso.GetFolder("E:\\word\\JavaScript");
2.Folder对象的方法与属性
Folder对象的属性和方法与File对象中的属性和方法类似,但它针对的不是文件,而是文件夹。在Folder对象中有两个属性是File对象所没有的,下面对其进行介绍。
(1)Files属性
Files属性用于返回一个Files集合,由指定文件夹中包含的所有File对象组成,包括设置了隐藏和系统文件属性的文件。
语法格式:
object.Files
参数说明:
object:表示Folder对象。
例如,获取E:\word\JavaScript路径下的所有文件名称(name1、name2和qq),代码如下:
<script language="javascript"> var fso=new ActiveXObject("Scripting.FileSystemObject"); var s=fso.GetFolder("E:\\word\\JavaScript"); var fn=new Enumerator(s.files); var s=""; for(; !fn.atEnd(); fn.moveNext()) s=s+fn.item()+"\n"; alert(s); </script>
运行结果如图5.14所示。
图5.14 获取文件夹下的所有文件名
(2)IsRootFolder属性
IsRootFolder属性用于判断当前文件夹是否为根文件夹。如果是根文件夹,返回true,否则返回false。
语法格式:
object.IsRootFolder
参数说明:
object:表示Folder对象。
例如,判断当前文件夹是否为根文件夹,代码如下:
运行结果:
JavaScript文件夹不为根文件夹