JavaScript从入门到精通(第3版)
上QQ阅读APP看书,第一时间看更新

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文件夹不为根文件夹