direktori cari
JScript 用户指南 Jscript 基础 编写 JScript 代码 JScript 的变量 JScript 的数据类型 JScript 的运算符 控制程序的流程 JScript 函数 Jscript对象 创建自己的对象 内部对象 JScript 保留关键字 高级 JScript 创建高级对象 递归 变量范围 复制、传递和比较数据 使用数组 特殊字符 脚本问题解答 条件编译 条件编译变量 在浏览器中显示信息 使用消息框 语言参考 特性信息 Microsoft JScript 特性 - ECMA Microsoft JScript 特性 - 非-ECMA JScript 字母顺序的关健字列表 JScript 错误 JScript 运行时错误 JScript 语法错误 JScript 函数 GetObject 函数 ScriptEngine 函数 ScriptEngineBuildVersion 函数 ScriptEngineMajorVersion 函数 ScriptEngineMinorVersion 函数 JScript 方法 A-E abs 方法 acos 方法 anchor 方法 apply 方法 asin 方法 atan 方法 atan2 方法 atEnd 方法 big 方法 blink 方法 bold 方法 call 方法 ceil 方法 charAt 方法 charCodeAt 方法 compile 方法 concat 方法 (Array) concat 方法 (String) cos 方法 decodeURI 方法 decodeURIComponent 方法 dimensions 方法 encodeURI 方法 encodeURIComponent 方法 escape 方法 eval 方法 exec 方法 exp 方法 F-I fixed 方法 floor 方法 fontcolor 方法 fontsize 方法 fromCharCode 方法 getDate 方法 getDay 方法 getFullYear 方法 getHours 方法 getItem 方法 getMilliseconds 方法 getMinutes 方法 getMonth 方法 getSeconds 方法 getTime 方法 getTimezoneOffset 方法 getUTCDate 方法 getUTCDay 方法 getUTCFullYear 方法 getUTCHours 方法 getUTCMilliseconds 方法 getUTCMinutes 方法 getUTCMonth 方法 getUTCSeconds 方法 getVarDate 方法 getYear 方法 indexOf 方法 isFinite 方法 isNaN 方法 italics 方法 item 方法 J-R join 方法 lastIndexOf 方法 lbound 方法 link 方法 localeCompare 方法 log 方法 match 方法 max 方法 min 方法 moveFirst 方法 moveNext 方法 parse 方法 parseFloat 方法 parseInt 方法 pop 方法 pow 方法 push 方法 random 方法 replace 方法 reverse 方法 round 方法 S search 方法 setDate 方法 setFullYear 方法 setHours 方法 setMilliseconds 方法 setMinutes 方法 setMonth 方法 setSeconds 方法 setTime 方法 setUTCDate 方法 setUTCFullYear 方法 setUTCHours 方法 setUTCMilliseconds 方法 setUTCMinutes 方法 setUTCMonth 方法 setUTCSeconds 方法 setYear 方法 shift 方法 sin 方法 slice 方法 (Array) slice 方法 (String) small 方法 sort 方法 splice 方法 split 方法 sqrt 方法 strike 方法 sub 方法 substr 方法 substring 方法 sup 方法 T-Z tan 方法 test 方法 toArray 方法 toDateString 方法 toExponential 方法 toFixed 方法 toGMTString 方法 toLocaleDateString 方法 toLocaleLowerCase 方法 toLocaleString 方法 toLocaleTimeString 方法 toLocaleUpperCase 方法 toLowerCase 方法 toPrecision 方法 toString 方法 toTimeString 方法 toUpperCase 方法 toUTCString 方法 ubound 方法 unescape 方法 unshift 方法 UTC 方法 valueOf 方法 JScript 对象 ActiveXObject 对象 Array 对象 Boolean 对象 Date 对象 Enumerator 对象 Error 对象 Function 对象 Global 对象 Math 对象 Number 对象 Object 对象 RegExp 对象 正则表达式对象 String 对象 VBArray 对象 JScript 运算符 通用信息 运算符优先级 运算符总结 加法赋值运算符 (+=) 加法运算符 (+) 赋值运算符 (=) 按位“与”赋值运算符 (&=) 按位“与”运算符 (&) 按位左移运算符 (<<) 按位“非”运算符 (~) 按位“或”赋值运算符 (|=) 按位“或”运算符 (|) 按位右移运算符 (>>) 按位“异或”赋值运算符 (^=) 按位“异或”运算符 (^) 逗号运算符 ( 比较运算符 复合赋值运算符 条件(三目)运算符 (?:) delete 运算符 除法赋值运算符 (/=) 除法运算符 (/) in 运算符 递增 (++) 和递减 (--) 运算符 instanceof 运算符 左移赋值运算符 (<<=) 逻辑“与”运算符 (&&) 逻辑“非”运算符 (!) 逻辑“或”运算符 (||) 取余赋值运算符 (%=) 取余运算符 (%) 乘法赋值运算符 (*=) 乘法运算符 (*) new 运算符 右移赋值运算符 (>>=) 减法赋值运算符 (-=) 减法运算符 (-) typeof 运算符 无符号右移运算符 (>>>) 无符号右移赋值操作 (>>>=) void 运算符 JScript 属性 $1...$9 属性 arguments 属性 caller 属性 constructor 属性 description 属性 E 属性 global 属性 hasOwnProperty 方法 ignoreCase 属性 index 属性 Infinity 属性 input 属性($_) isProptotyeOf 方法 lastIndex 属性 length 属性 (Array) length 属性 (Function) length 属性 (String) LN10 属性 LN2 属性 LOG10E 属性 LOG2E 属性 MAX_VALUE 属性 message 属性 MIN_VALUE 属性 multiline 属性 name 属性 NaN 属性 NaN 属性 (Global) NEGATIVE_INFINITY 属性 number 属性 PI 属性 POSITIVE_INFINITY 属性 propertyIsEnumerable 属性 prototype 属性 source 属性 SQRT1_2 属性 SQRT2 属性 undefined 属性 JScript 语句 @cc_on 语句 @if 语句 @set 语句 break 语句 Comment 语句 continue 语句 do...while 语句 for 语句 for...in 语句 function 语句 if...else 语句 Labeled 语句 return 语句 switch 语句 this 语句 throw 语句 try...catch...finally 语句 var 语句 while 语句 with 语句 FileSystemObject 用户指南 FileSystemObject 对象模型 FileSystemObject 和 Scripting 运行时库参考的介绍 FileSystemObject 对象 设计 FileSystemObject 处理驱动器和文件夹 处理文件 FileSystemObject 示例代码 Scripting 运行时库参考 脚本运行时方法 Add 方法 (Dictionary) Add 方法 (Folders) BuildPath 方法 Close 方法 Copy 方法 CopyFile 方法 CopyFolder 方法 CreateFolder 方法 CreateTextFile 方法 Delete 方法 DeleteFile 方法 DeleteFolder 方法 DriveExists 方法 Exists 方法 FileExists 方法 FolderExists 方法 GetAbsolutePathName 方法 GetBaseName 方法 GetDrive 方法 GetDriveName 方法 GetExtensionName 方法 GetFile 方法 GetFileName 方法 getFileVersion 方法 GetFolder 方法 GetParentFolderName 方法 GetSpecialFolder 方法 GetTempName 方法 Items 方法 Keys 方法 Move 方法 MoveFile 方法 MoveFolder 方法 OpenAsTextStream 方法 OpenTextFile 方法 Read 方法 ReadAll 方法 ReadLine 方法 Remove 方法 RemoveAll 方法 Skip 方法 SkipLine 方法 Write 方法 WriteBlankLines 方法 WriteLine 方法 脚本运行时对象 Dictionary 对象 Drive 对象 Drives 集合 File 对象 Files 集合 FileSystemObject 对象 Folder 对象 Folders 集合 TextStream 对象 脚本运行时属性 AtEndOfLine 属性 AtEndOfStream 属性 Attributes 属性 AvailableSpace 属性 Column 属性 CompareMode 属性 Count 属性 DateCreated 属性 DateLastAccessed 属性 DateLastModified 属性 Drive 属性 DriveLetter 属性 Drives 属性 DriveType 属性 Files 属性 FileSystem 属性 FreeSpace 属性 IsReady 属性 IsRootFolder 属性 Item 属性 Key 属性 Line 属性 Name 属性 ParentFolder 属性 Path 属性 RootFolder 属性 SerialNumber 属性 ShareName 属性 ShortName 属性 ShortPath 属性 Size 属性 SubFolders 属性 TotalSize 属性 Type 属性 VolumeName 属性 正则表达式简介 正则表达式 早期起源 使用正则表达式 正则表达式语法 建立正则表达式 优先权顺序 普通字符 特殊字符 非打印字符 字符匹配 限定符 定位符 选择和编组 后向引用
watak


控制程序的流程

Jscript 脚本中的语句一般是按照写的顺序来运行的。这种运行称为顺序运行,是程序流的默认方向。

与顺序运行不同,另一种运行将程序流转换到脚本的另外的部分。也就是,不按顺序运行下一条语句,而是运行另外的语句。

要使脚本可用,该控制的转换必须以逻辑方式执行。程序控制的转换是基于一个“决定”,这个“决定”结果是真或假(返回  Boolean 型 true false)。 创建一个表达式,然后测试其是否为真。主要有两种程序结构实现本功能。

第一种是选择结构。用来指明两种程序流方向,在程序中创建一个交叉点(像岔路)。在 Jscript 中有四种选择结构可用。

  • 单一选择结构(if),
  • 二路选择结构(if/else),
  • 内联三元运算符 ?:
  • 多路选择结构(switch)。

第二种类型的程序控制结构是循环结构。使用循环结构来指明当某些条件保持为真时要重复的动作。当控制语句的条件得到满足时(通常在某些迭代的特定数字后),控制跳过循环结构传递到下条语句。在 Jscript 中有四种循环结构可用。

  • 在循环的开头测试表达式(while),
  • 在循环的末尾测试表达式(do/while),
  • 对对象的每个属性都进行操作(for/in),
  • 由计数器控制的循环(for)。

通过嵌套和堆栈选择、循环控制结构,可以创建相当复杂的脚本。

第三种形式的结构程序流由意外处理给出,本文档不作讨论。

使用条件语句

JScript 支持 if 和 if...else 条件语句。在 if 语句中将测试一个条件,如果该条件满足测试,执行相关的 JScript 编码。在 if...else 语句中,如果条件不满足测试,则将执行不同的代码。最简单的 if 语句格式可以在一行中写完,不过更常见的是多行的 ifif...else 语句。

下述示例演示了使用 ifif...else 语句的各种可能的语法。第一个示例演示了最简单的布尔测试。当(且仅当)括号之间的项的值为(或者可被强制转换为) true 时,if 后续的语句或语句块才会被执行。

// smash() 函数是在该代码的其他地方定义的。
// 布尔测试,看 newShip 是否为 trueif (newShip)
   smash(champagneBottle,bow); 

// 在本示例中,除非两个条件都为真,否则该测试将不会被满足。
if (rind.color == "deep yellow " && rind.texture == "large and small wrinkles")
{
   theResponse = ("Is it a Crenshaw melon?");
}

// 在本示例中,只要任何一个条件为真,则测试即会满足。
var theReaction = "";
if ((dayOfWeek == "Saturday") || (dayOfWeek == "Sunday"))
{
   theReaction = ("I'm off to the beach!");
}
else
{
   theReaction = ("Hi ho, hi ho, it's off to work I go!");
}

条件运算符

JScript 也支持隐式的条件格式。该格式在要测试的条件后使用一个问号(而不是在条件前的 if )。它也指定两个可选项,一个在满足条件时使用,另一个在条件不满足时使用。这两个选择项之间必须用一个冒号隔开。

var hours = "";

// 下面的代码指定 hours 是包含 theHour 的内容,
// 还是包含 theHour - 12 的内容。

hours += (theHour >= 12) ? " PM" : " AM";

如果要一起测试多个条件,并且知道某个条件比其他条件更可能满足或不满足测试,可以使用称为“短路计算”的特性来加速脚本的运行速度。当 JScript 计算逻辑表达式时,只计算要得到结果所需的子表达式。

例如,如果有一个“与”表达式,如 ((x == 123) && (y == 42)),Jscript 首先检查 x 是否为 123。如果不是,即使 y 等于 42,整个表达式的值也不可能为 true。因此,并不对 y 作测试,Jscript 返回 false 值。

类似地,如果多个条件中只要有一个为真(使用 || 运算符),则当任何一个条件满足该测试时测试则停止。如果要测试的条件包括函数调用或其他复合表达式,这种处理方式就有效。出于此种想法,写 OR 表达式时,先写最有可能为 true 的条件。写 AND 表达式时,先写最有可能为 false 的条件。

以这种方式设计脚本的好处的一个示例是:在下例中如果 runfirst() 返回 0 或 false, 则不会运行 runsecond()

if ((runfirst() == 0) || (runsecond() == 0)) {
    // 若干代码。
}

使用循环

有多种方式来重复执行一条语句或语句块。通常重复执行被称为循环重复。重复只是循环的一个运行。典型情况是用一个变量测试来进行控制,每执行一次循环变量的取值都会更改。JScript 支持四种循环: for 循环、 for...in 循环、 while 循环、 do...while 循环。

使用 for 循环

for 语句指定了一个计数器变量,一个测试条件,以及更新该计数器的操作。在每次循环的重复之前,都将测试该条件。如果测试成功,将运行循环中的代码。如果测试不成功,不运循环中的代码,程序继续运行紧跟在循环后的第一行代码。在执行该循环后,计算机变量将在下一次循环之前被更新。

如果循环条件永不会满足,则不执行该循环。如果测试条件始终满足,则将导致无限循环。在有些情况下,前者可能是合乎需要的,而后者几乎没有用处,因此在编写循环条件时一定要注意。



var howFar = 10;  // 将循环次数限制为 10var sum = new Array(howFar);  // 创建一个称为 sum 并具有 10 个成员的数组,这 10 个成员从 0  9var theSum = 0;
sum[0] = 0;

for(var icount = 0; icount < howFar; icount++)  {        // 在本例中将从 0  9 进行计数。
theSum += icount;
sum[icount] = theSum;
}

var newSum = 0;
for(var icount = 0; icount > howFar; icount++)  {        // 该循环根本不会被执行,因为 icount 不大于 howFarnewSum += icount;
}

var sum = 0;
for(var icount = 0; icount >= 0; icount++)  {        // 这是一个无限循环。
sum += icount;
}

使用 for...in 循环

JScript 提供了一种特别的循环方式来遍历一个对象的所有用户定义的属性或者一个数组的所有元素。for...in 循环中的循环计数器是一个字符串,而不是数字。它包含当前属性的名称或者当前数组元素的下标。

下面的代码范例应在 Internet 浏览器中运行,因为它使用 alert 方法,该方法不属于 Jscript。

// 创建具有某些属性的对象
var myObject = new Object();
myObject.name = "James";
myObject.age = "22";
myObject.phone = "555 1234";

// 枚举(循环)对象的所有属性
for (prop in myObject)
{
    // 显示 "The property 'name' is James",等等。
    window.alert("The property '" + prop + "' is " + myObject[prop]);
}

尽管 for...in 循环看起来像 VBScript 的 For Each...Next 循环,其实并不一样。JScript 的 for...in 循环重复Jscript 对象所有的属性。VBScript 的 For Each...Next 循环重复集合中的所有项目。要循环 JScript 中的所有集合,需要用 Enumerator 对象。尽管某些对象(像 Internet 浏览器中的那些)支持 VBScript 的 For Each...Next 和 Jscript 的 for...in 循环,但多数对象并不都支持。

使用 while 循环

while 循环相似于 for 循环。其不同之处是 while 循环没有内置的计数器或更新表达式。如果希望控制语句或语句块的循环执行,需要不只是“运行该代码 n 次”,而是更复杂的规则,用 while 循环。下面的示例使用 Internet 浏览器对象模型和 while 循环来询问用户一个简单的问题。

var x = 0;
while ((x != 42) && (x != null))
{
    x = window.prompt("What is my favourite number?", x);
}

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");

注意   由于 while 循环没有显式的内置计数器变量,因此比其他类型的循环更容易产生无限循环。此外,由于不易发现循环条件是在何时何地被更新的,很容易编写一个实际上从不更新条件的 while 循环。因此在编写 while 循环时应特别小心。

同上面所提到的,在 JScript 中还有 do...while 循环与 while 循环相似,不同处在于它总是至少运行一次,因为是在循环的末尾检查条件,而不是在开头。例如,上面的循环可以被改写为:

var x = 0;
do
{
    x = window.prompt("What is my favourite number?", x);
} while ((x != 42) && (x != null));

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");

使用 break 和 continue 语句

在 Microsoft Jscript 中当某些条件得到满足时,用 break 语句来中断一个循环的运行。(请注意,也用 break 语句退出一个 switch 块。)。如果是一个 for 或者 for...in 循环,在更新计数器变量时使用 continue 语句越过余下的代码块而直接跳到下一个循环中。

下面的例子基于前面的示例用 break continue 语句控制循环。

var x = 0;
do
{
    x = window.prompt("What is my favourite number?", x);

    // 判断用户是否选择取消?如果是,退出循环。
    if (x == null)
        break;

    // 是否输入一个数?
    // 如果是则无需要求输入一个数。
    if (Number(x) == x)
        continue;

    //  要求用户只输入数字。
    window.alert("Please only enter in numbers!");

} while (x != 42)

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");
Artikel sebelumnya: Artikel seterusnya: