目录搜索
JScript 用户指南Jscript 基础编写 JScript 代码JScript 的变量JScript 的数据类型JScript 的运算符控制程序的流程JScript 函数Jscript对象创建自己的对象内部对象JScript 保留关键字高级 JScript创建高级对象递归变量范围复制、传递和比较数据使用数组特殊字符脚本问题解答条件编译条件编译变量在浏览器中显示信息使用消息框语言参考特性信息Microsoft JScript 特性 - ECMAMicrosoft JScript 特性 - 非-ECMAJScript 字母顺序的关健字列表JScript 错误JScript 运行时错误JScript 语法错误JScript 函数GetObject 函数ScriptEngine 函数ScriptEngineBuildVersion 函数ScriptEngineMajorVersion 函数ScriptEngineMinorVersion 函数JScript 方法A-Eabs 方法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-Ifixed 方法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-Rjoin 方法lastIndexOf 方法lbound 方法link 方法localeCompare 方法log 方法match 方法max 方法min 方法moveFirst 方法moveNext 方法parse 方法parseFloat 方法parseInt 方法pop 方法pow 方法push 方法random 方法replace 方法reverse 方法round 方法Ssearch 方法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-Ztan 方法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 属性正则表达式简介正则表达式早期起源使用正则表达式正则表达式语法建立正则表达式优先权顺序普通字符特殊字符非打印字符字符匹配限定符定位符选择和编组后向引用
文字


控制程序的流程

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!");
上一篇:下一篇: