大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
二级WEB程序设计考试大纲
10年积累的成都网站制作、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有夏县免费网站建设让你可以放心的选择与我们合作。
一、基本要求
1. 掌握Web工作原理,了解Web技术基础知识,熟悉IIS的管理;
2. 掌握静态网页设计技术,熟练掌握网页的HTML代码编写;
3. 熟练掌握一种脚本语言(VBScript或JavaScript)的编程方法,具有较强的客户端动态设计的能力;
4. 熟练掌握ASP工作原理和ASP编程方法,具有较强的服务器端动态设计的能力;
5. 熟悉数据库的操作和SQL语言的运用,熟练掌握ADO工作原理,熟练运用ADO进行数据库的管理;
6. 基本具有小型Web应用系统的综合设计能力。
二、考试范围
(一)Web技术基础
1. Web工作原理:WWW概念和标准、W3C、Web客户端和Web浏览器、Web服务器端和Web服务器;
2. TCP/IP协议、IP地址和域名服务;
3. HTTP和URL: HTTP工作过程、HTTP Request、HTTP Response,URL;
4. IIS的安装、配置和管理;
5. 站点的规划、设计、发布和管理。
(二)静态网页设计
1.静态网页开发技术:页面设计原则、可视化页面设计工具(FrontPage或DreamWeaver)的运用;
2.HTML代码:HTML基本语法、HTML常用标签;
3.XML、DHTML、XHTML。
(三)脚本语言和程序设计(脚本语言任选一种)
1.VBScript:VBScript语法、VBScript数据类型、变量、常
量、数组、运算符、表达式、内部函数、程序控制结构、Sub过程、Function函数,VBScript嵌入HTML;
2.JavaScript:JavaScript语法、JavaScript数据类型及类型转换、变量、数组、操作符、表达式、函数、程序控制结构,JavaScript事件;JavaScript内置对象,对象层次及DOM模型,JavaScript嵌入HTML;
(四)服务器端动态设计
1.ASP工作原理;
2. ASP编程:ASP文件的建立与运行,Response对象、Request
对象、Session对象、Application对象、Server对象、使用Form集合、使用QueryString集合、使用Cookies集合、使用Clinet Certificate集合、文件存取组件FileSystemObject、 a文件;
3.CGI、PHP、JSP的工作原理。
(五)Web数据库应用
1.Access数据库和SQL Server数据库的应用:数据库的建
立、数据表的建立、数据的输入、修改、查询和删除等操作;
2.SQL语言的应用:Select语句查询记录、Insert语句插入
记录、Update语句修改记录、Delete语句删除记录;
3.ODBC数据源的配置与管理:ODBC的概念、ODBC驱动程序、
ODBC数据源的建立、ODBC数据源的配置与管理;
4.ADO访问数据库:ADO工作原理,与ACCESS数据库的连接、
与SQL Server数据库的连接,ADO的Connection对象、ADO的Recordset对象、ADO的Command对象;
5.小型Web应用系统的综合设计
有学过的话重新上手也是很快的,这些东西平时没事做的时候就要多多复习的,不让很快就忘光的,熟能生巧,现在不要着急,稳扎稳打,要安心下来,心急吃不了热豆腐。
上楼回答的很不错了你看看这一个纯JavaScript教程网站吧
我就是靠他学的
JavaScript 是使用“对象化编程”的,或者叫“面向对象编程”的。所谓“对象化编程”,意思是把 JavaScript 能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编程都以对象为出发点,基于对象。小到一个变量,大到网页文档、窗口甚至屏幕,都是对象。这一章将“面向对象”讲述 JavaScript 的运行情况。
对象的基本知识
对象是可以从 JavaScript“势力范围”中划分出来的一小块,可以是一段文字、一幅图片、一个表单(Form)等等。每个对象有它自己的属性、方法和事件。对象的属性是反映该对象某些特定的性质的,例如:字符串的长度、图像的长宽、文字框(Textbox)里的文字等等;对象的方法能对该对象做一些事情,例如,表单的“提交”(Submit),窗口的“滚动”(Scrolling)等等;而对象的事件就能响应发生在对象上的事情,例如提交表单产生表单的“提交事件”,点击连接产生的“点击事件”。不是所有的对象都有以上三个性质,有些没有事件,有些只有属性。引用对象的任一“性质”用“对象名.性质名”这种方法。
基本对象
现在我们要复习以上学过的内容了——把一些数据类型用对象的角度重新学习一下。
Number “数字”对象。这个对象用得很少,作者就一次也没有见过。不过属于“Number”的对象,也就是“变量”就多了。
属性
MAX_VALUE 用法:Number.MAX_VALUE;返回“最大值”。
MIN_VALUE 用法:Number.MIN_VALUE;返回“最小值”。
NaN 用法:Number.NaN 或 NaN;返回“NaN”。“NaN”(不是数值)在很早就介绍过了。
NEGATIVE_INFINITY 用法:Number.NEGATIVE_INFINITY;返回:负无穷大,比“最小值”还小的值。
POSITIVE_INFINITY 用法:Number.POSITIVE_INFINITY;返回:正无穷大,比“最大值”还大的值。
方法
toString() 用法:数值变量.toString();返回:字符串形式的数值。如:若 a == 123;则 a.toString() == '123'。
String 字符串对象。声明一个字符串对象最简单、快捷、有效、常用的方法就是直接赋值。
属性
length 用法:字符串对象.length;返回该字符串的长度。
方法
charAt() 用法:字符串对象.charAt(位置);返回该字符串位于第位置位的单个字符。注意:字符串中的一个字符是第 0 位的,第二个才是第 1 位的,最后一个字符是第 length - 1 位的。
charCodeAt() 用法:字符串对象.charCodeAt(位置);返回该字符串位于第位置位的单个字符的 ASCII 码。
fromCharCode() 用法:String.fromCharCode(a, b, c...);返回一个字符串,该字符串每个字符的 ASCII 码由 a, b, c... 等来确定。
indexOf() 用法:字符串对象.indexOf(另一个字符串对象[, 起始位置]);该方法从字符串对象中查找另一个字符串对象(如果给出起始位置就忽略之前的位置),如果找到了,就返回它的位置,没有找到就返回“-1”。所有的“位置”都是从零开始的。
lastIndexOf() 用法:字符串对象.lastIndexOf(另一个字符串对象[, 起始位置]);跟 indexOf() 相似,不过是从后边开始找。
split() 用法:字符串对象.split(分隔符字符);返回一个数组,该数组是从字符串对象中分离开来的,分隔符字符决定了分离的地方,它本身不会包含在所返回的数组中。例如:'12345678'.split('')返回数组:1,2,345,678。关于数组,我们等一下就讨论。
substring() 用法:字符串对象.substring(始[, 终]);返回原字符串的子字符串,该字符串是原字符串从始位置到终位置的前一位置的一段。终 - 始 = 返回字符串的长度(length)。如果没有指定终或指定得超过字符串长度,则子字符串从始位置一直取到原字符串尾。如果所指定的位置不能返回字符串,则返回空字符串。
substr() 用法:字符串对象.substr(始[, 长]);返回原字符串的子字符串,该字符串是原字符串从始位置开始,长度为长的一段。如果没有指定长或指定得超过字符串长度,则子字符串从始位置一直取到原字符串尾。如果所指定的位置不能返回字符串,则返回空字符串。
toLowerCase() 用法:字符串对象.toLowerCase();返回把原字符串所有大写字母都变成小写的字符串。
toUpperCase() 用法:字符串对象.toUpperCase();返回把原字符串所有小写字母都变成大写的字符串。
Array 数组对象。数组对象是一个对象的集合,里边的对象可以是不同类型的。数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置(既然是“位置”,就也是从零开始的啦)。
数组的定义方法:
var 数组名 = new Array();
这样就定义了一个空数组。以后要添加数组元素,就用:
数组名[下标] = ...;
注意这里的方括号不是“可以省略”的意思,数组的下标表示方法就是用方括号括起来。
如果想在定义数组的时候直接初始化数据,请用:
var 数组名 = new Array(元素1, 元素2, 元素3...);
例如,var myArray = new Array(1, 4.5, 'Hi'); 定义了一个数组 myArray,里边的元素是:myArray[0] == 1; myArray[1] == 4.5; myArray[2] == 'Hi'。
但是,如果元素列表中只有一个元素,而这个元素又是一个正整数的话,这将定义一个包含正整数个空元素的数组。
注意:JavaScript只有一维数组!千万不要用“Array(3,4)”这种愚蠢的方法来定义 4 x 5 的二维数组,或者用“myArray[2,3]”这种方法来返回“二维数组”中的元素。任意“myArray[...,3]”这种形式的调用其实只返回了“myArray[3]”。要使用多维数组,请用这种虚拟法:
var myArray = new Array(new Array(), new Array(), new Array(), ...);
其实这是一个一维数组,里边的每一个元素又是一个数组。调用这个“二维数组”的元素时:myArray[2][3] = ...;
属性
length 用法:数组对象.length;返回:数组的长度,即数组里有多少个元素。它等于数组里最后一个元素的下标加一。所以,想添加一个元素,只需要:myArray[myArray.length] = ...。
方法
join() 用法:数组对象.join(分隔符);返回一个字符串,该字符串把数组中的各个元素串起来,用分隔符置于元素与元素之间。这个方法不影响数组原本的内容。
reverse() 用法:数组对象.reverse();使数组中的元素顺序反过来。如果对数组[1, 2, 3]使用这个方法,它将使数组变成:[3, 2, 1]。
slice() 用法:数组对象.slice(始[, 终]);返回一个数组,该数组是原数组的子集,始于始,终于终。如果不给出终,则子集一直取到原数组的结尾。
sort() 用法:数组对象.sort([方法函数]);使数组中的元素按照一定的顺序排列。如果不指定方法函数,则按字母顺序排列。在这种情况下,80 是比 9 排得前的。如果指定方法函数,则按方法函数所指定的排序方法排序。方法函数比较难讲述,这里只将一些有用的方法函数介绍给大家。
按升序排列数字:
function sortMethod(a, b) {
return a - b;
}
myArray.sort(sortMethod);
按降序排列数字:把上面的“a - b”该成“b - a”。
有关函数,请看下面。
Math “数学”对象,提供对数据的数学计算。下面所提到的属性和方法,不再详细说明“用法”,大家在使用的时候记住用“Math.名”这种格式。
属性
E 返回常数 e (2.718281828...)。
LN2 返回 2 的自然对数 (ln 2)。
LN10 返回 10 的自然对数 (ln 10)。
LOG2E 返回以 2 为低的 e 的对数 (log2e)。
LOG10E 返回以 10 为低的 e 的对数 (log10e)。
PI 返回π(3.1415926535...)。
SQRT1_2 返回 1/2 的平方根。
SQRT2 返回 2 的平方根。
方法
abs(x) 返回 x 的绝对值。
acos(x) 返回 x 的反余弦值(余弦值等于 x 的角度),用弧度表示。
asin(x) 返回 x 的反正弦值。
atan(x) 返回 x 的反正切值。
atan2(x, y) 返回复平面内点(x, y)对应的复数的幅角,用弧度表示,其值在 -π 到 π 之间。
ceil(x) 返回大于等于 x 的最小整数。
cos(x) 返回 x 的余弦。
exp(x) 返回 e 的 x 次幂 (ex)。
floor(x) 返回小于等于 x 的最大整数。
log(x) 返回 x 的自然对数 (ln x)。
max(a, b) 返回 a, b 中较大的数。
min(a, b) 返回 a, b 中较小的数。
pow(n, m) 返回 n 的 m 次幂 (nm)。
random() 返回大于 0 小于 1 的一个随机数。
round(x) 返回 x 四舍五入后的值。
sin(x) 返回 x 的正弦。
sqrt(x) 返回 x 的平方根。
tan(x) 返回 x 的正切。
Date 日期对象。这个对象可以储存任意一个日期,从 0001 年到 9999 年,并且可以精确到毫秒数(1/1000 秒)。在内部,日期对象是一个整数,它是从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。如果所指日期比 1970 年早,则它是一个负数。所有日期时间,如果不指定时区,都采用“UTC”(世界时)时区,它与“GMT”(格林威治时间)在数值上是一样的。
定义一个日期对象:
var d = new Date;
这个方法使 d 成为日期对象,并且已有初始值:当前时间。如果要自定初始值,可以用:
var d = new Date(99, 10, 1); //99 年 10 月 1 日
var d = new Date('Oct 1, 1999'); //99 年 10 月 1 日
等等方法。最好的方法就是用下面介绍的“方法”来严格的定义时间。
方法
以下有很多“g/set[UTC]XXX”这样的方法,它表示既有“getXXX”方法,又有“setXXX”方法。“get”是获得某个数值,而“set”是设定某个数值。如果带有“UTC”字母,则表示获得/设定的数值是基于 UTC 时间的,没有则表示基于本地时间或浏览期默认时间的。
如无说明,方法的使用格式为:“对象.方法”,下同。
g/set[UTC]FullYear() 返回/设置年份,用四位数表示。如果使用“x.set[UTC]FullYear(99)”,则年份被设定为 0099 年。
g/set[UTC]Year()返回/设置年份,用两位数表示。设定的时候浏览器自动加上“19”开头,故使用“x.set[UTC]Year(00)”把年份设定为 1900 年。
g/set[UTC]Month()返回/设置月份。
g/set[UTC]Date()返回/设置日期。
g/set[UTC]Day()返回/设置星期,0 表示星期天。
g/set[UTC]Hours()返回/设置小时数,24小时制。
g/set[UTC]Minutes()返回/设置分钟数。
g/set[UTC]Seconds()返回/设置秒钟数。
g/set[UTC]Milliseconds()返回/设置毫秒数。
g/setTime() 返回/设置时间,该时间就是日期对象的内部处理方法:从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。如果要使某日期对象所指的时间推迟 1 小时,就用:“x.setTime(x.getTime() + 60 * 60 * 1000);”(一小时 60 分,一分 60 秒,一秒 1000 毫秒)。
getTimezoneOffset() 返回日期对象采用的时区与格林威治时间所差的分钟数。在格林威治东方的市区,该值为负,例如:中国时区(GMT+0800)返回“-480”。
toString() 返回一个字符串,描述日期对象所指的日期。这个字符串的格式类似于:“Fri Jul 21 15:43:46 UTC+0800 2000”。
toLocaleString() 返回一个字符串,描述日期对象所指的日期,用本地时间表示格式。如:“2000-07-21 15:43:46”。
toGMTString() 返回一个字符串,描述日期对象所指的日期,用 GMT 格式。
toUTCString() 返回一个字符串,描述日期对象所指的日期,用 UTC 格式。
parse() 用法:Date.parse(日期对象);返回该日期对象的内部表达方式。
全局对象
全局对象从不现形,它可以说是虚拟出来的,目的在于把全局函数“对象化”。在 Microsoft JScript 语言参考中,它叫做“Global 对象”,但是引用它的方法和属性从来不用“Global.xxx”(况且这样做会出错),而直接用“xxx”。
属性
NaN 一早就说过了。
方法
eval() 把括号内的字符串当作标准语句或表达式来运行。
isFinite() 如果括号内的数字是“有限”的(介于 Number.MIN_VALUE 和 Number.MAX_VALUE 之间)就返回 true;否则返回 false。
isNaN() 如果括号内的值是“NaN”则返回 true 否则返回 false。
parseInt() 返回把括号内的内容转换成整数之后的值。如果括号内是字符串,则字符串开头的数字部分被转换成整数,如果以字母开头,则返回“NaN”。
parseFloat() 返回把括号内的字符串转换成浮点数之后的值,字符串开头的数字部分被转换成浮点数,如果以字母开头,则返回“NaN”。
toString() 用法:对象.toString();把对象转换成字符串。如果在括号中指定一个数值,则转换过程中所有数值转换成特定进制。
escape() 返回括号中的字符串经过编码后的新字符串。该编码应用于 URL,也就是把空格写成“%20”这种格式。“+”不被编码,如果要“+”也被编码,请用:escape('...', 1)。
unescape() 是 escape() 的反过程。解编括号中字符串成为一般字符串。
函数函数的定义
所谓“函数”,是有返回值的对象或对象的方法。
函数的种类
常见的函数有:构造函数,如 Array(),能构造一个数组;全局函数,即全局对象里的方法;自定义函数;等等。
自定义函数
定义函数用以下语句:
function 函数名([参数集]) {
...
[return[ 值];]
...
}
其中,用在 function 之后和函数结尾的大括号是不能省去的,就算整个函数只有一句。
函数名与变量名有一样的起名规定,也就是只包含字母数字下划线、字母排头、不能与保留字重复等。
参数集可有可无,但括号就一定要有。
参数 是函数外部向函数内部传递信息的桥梁,例如,想叫一个函数返回 3 的立方,你就要让函数知道“3”这个数值,这时候就要有一个变量来接收数值,这种变量叫做参数。
参数集是一个或多个用逗号分隔开来的参数的集合,如:a, b, c。
函数的内部有一至多行语句,这些语句并不会立即执行,而只当有其它程序调用它时才执行。这些语句中可能包含“return”语句。在执行一个函数的时候,碰到 return 语句,函数立刻停止执行,并返回到调用它的程序中。如果“return”后带有值,则退出函数的同时返回该值。
在函数的内部,参数可以直接当作变量来使用,并可以用 var 语句来新建一些变量,但是这些变量都不能被函数外部的过程调用。要使函数内部的信息能被外部调用,要么使用“return”返回值,要么使用全局变量。
全局变量 在 Script 的“根部”(非函数内部)的“var”语句所定义的变量就是全局变量,它能在整个过程的任意地方被调用、更改。
例
function addAll(a, b, c) {
return a + b + c;
}
var total = addAll(3, 4, 5);
这个例子建立了一个叫“addAll”的函数,它有 3 个参数:a, b, c,作用是返回三个数相加的结果。在函数外部,利用“var total = addAll(3, 4, 5);”接收函数的返回值。
更多的时候,函数是没有返回值的,这种函数在一些比较强调严格的语言中是叫做“过程”的,例如 Basic 类语言的“Sub”、Pascal 语言的“procedure”。
属性
arguments 一个数组,反映外部程序调用函数时指定的参数。用法:直接在函数内部调用“arguments”。
差不多吧。我细致的看过五版,很经典。翻译也不算憋足。javascript这东西吧,难懂的其实是语法,作用域及作用域相关的知识(闭包啥的)比较费时间去理解领悟。至于新多出的那点东西,说实话,目前阶段来看无关紧要的。我记得通读jQuery源码的时候,更多的时候还是在复习js的一些语法知识。
6版我翻了下电子的英文版,不知道具体情况。应该都还不错,所以,你买便宜的吧。
学习java主要有自学和报班学习两种方式,如果是高效学习报班是最好的选择。
学成之后的就业岗位还是非常多的,网页制作,软件应用,服务器应用等等,都是java可以做的。想要学好Java,需要有正确的学习路线,有坚持不懈的学习毅力,也需要有专业老师的指导,这样才能学得更好。那么,学习Java需要掌握哪些知识和技能呢?这里简单列举一些。
Java学习需要掌握的知识与技能:
1、Java SE部分 初级语法,面向对象,异常,IO流,多线程,Java Swing,JDBC,泛型,注解,反射等。
2、数据库部分,基础的sql语句,sql语句调优,索引,数据库引擎,存储过程,触发器,事务等。
3、前端部分, HTML5 CSS3 JS, HTML DOM Jquery BootStrap等。
4、Java EE部分,Tomcat和Nginx服务器搭建,配置文件,Servlet,JSP,Filter,Listener,http协议,MVC等。
5、框架部分,每个框架都可以分开学,在去学如何使用SSM 或者SSH框架,如何搭建,如何整合。开发中为什么会用框架,Rest是啥?Spring为啥经久不衰,底层如何实现等。
6、23种设计模式,掌握常用的,比如单例模式的多种实现,责任链模式,工厂模式,装饰器模式等,了解常用场景。
7、基础算法和数据结构,八大排序算法,查找算法。
8、熟练使用maven等构建工具,git等版本控制工具,熟悉常用linux命令,log4j,dubug,junit单元测试,日志打印工具,Redis等NoSql。
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。
祝你学有所成,望采纳。
第一页:第四课介绍
对于Java script来说有两个主要部分:该语言本身及其目
标库。在第2课介绍的语法中,我们已经研究了变量,语句
和if-then子句,这些是所有程序设计语言的组成部分。现在来
学习Java script语法的其余部分。
对于Java script语法来说,我们仅剩下三个问题需要学习:
循环、数组和函数。
让我们从循环开始。
第二页:循环介绍
有时你想反复做同一件事。你想向某些人询问一个口令,你不
断地问,直到得到正确的口令。如果你只想给他们两次尝试的
机会,你可以这么做:
var the_password = "pass the wrench";
var answer = prompt("What's the woyd?","");
if (answer != the_password) {
answer = prompt("What's the woyd?","");
if (password != the_password) {
document.write("You lose!p");
} else {
document.write("That's right!p");
}
} else {
document.write("That's right!p");
}
不幸的是如果你想不住地问直到得到正确答案,上述做法是不
起作用的。假使你是想询问四次而不是两次,那这已经是很讨
厌的事了。你将使用四个层次的if-then 子句,这决不是件好事。
反复做相似的事情的最好方法是使用一个循环(loop)。在这种
情况下,你可以用一个循环来不断的要求口令直到这个人说出
为止。这里有一个while循环工作的例子,口令是:pass the
wrench。
第三页:循环的密码
那就是密码!
让我们逐行地来研究这个例子,如果你想看整个答案,可以查看源码。
在这个典型的Java script序言之后,我们从双变量申报开始:
var password="pass the wrench";
var answer;
这里我们定义该密码作为一个字符串,我们申报一个称为
answer的变量。你将理解为什么我们不得不立即申报一
个answer。下面几行是非常重要的:
while (answer != password)
{
answer = prompt("What's the woyd?","");
}
这是一个while循环。while 循环的一般格式为:
while (some test is true)
{
do the stuff inside the curly braces
}
上述几行表明:“当answer不等价于Password时,执行提示
命令。”这一循环将持续地执行波形括号内的语句直至测试
失败。在使用者输入的单词与密码一致(即Pass the wrench)的
情况下,测试必将失败。
由于在对一个未申报的变量执行一个如(answer!=password)的
测试时,在某些浏览器上会产生错误,所以我们必须申
报answer。由于在while循环中将通过提示方案对answer赋值,
在我们第一次进行循环中,answer将没有数值。提前定义它并
设定其处始值为“”。
由于不定义循环经常地使用,循环经常用来执行一组语句某一
特定的次数。这里用另一个循环来演示如何作这项工作。
第四页:再谈WHILE循环
我们已见到了很多所请求的X`S,现在复习一下:
第一步:请求X`S的数目
var width = prompt("How many x's would you like? (1-10 is
good)","5");
下一步,申报一些变量:
var a_line="";
var loop = 0;
现在,关键之处:
while (loop width)
{
a_line = a_line + "x";
loop=loop+1;
}
即说:“当变量循环小于所请求的X`S行宽时,在该行加入另一
X然后在循环值上加1。”该循环将继续加一X到该行并在循环值
上加1直到循环不在小于请求的行宽。请看下列源码分析:
第一次
a_line = "" (because we initialized it to be "")
loop=0 (because we initialized it to be 0)
width=2 (because that's what the user asked for)
0 is less than 2 so
a_line = a_line + "x", so now a_line = "x"
loop=loop+1, so now loop = 1
返回循环:第二次
loop=1
width=2
a_line = "x"
1 is less than 2 so
a_line = a_line + "x", so now a_line = "xx"
loop=loop+1, so now loop = 2
返回循环:第3次
loop=2
width=2
a_line = "xx"
2 is NOT less than 2 so
fall out of the loop and do what follows
随后是:
alert(a_line);
启动一个警告对话框。
这种循环运用的如此普遍以至于程序员们开发了一些简便
方式,条件循环可写成这样:
while (loop width)
{
a_line += "x"; //this was a_line = a_line + "x";
loop++; //this was loop=loop+1;
}
首行,“x”,表示“本身加x”。若已有a_number=5,那么可
写成,a_number+=3,即是说:a_number=a_number+3。程序员
就是这么偷懒的。
下行,loop++,意味着“自身加1”。于是loop++即为:
loop=loop=1。它也可写成loop+=1。这样偷懒行为非常有效。
就象不止一种方式在一个数上加1一样,也有不止一种方法来写
一个循环。While循环不是唯一的循环模式,另一流行的循环
是for循环。
第五页:For循环
上例中while循环可以写成如下形式:
var a_line="";
var loop = 0;
while (loop width)
{
a_line = a_line + "x";
loop=loop+1;
}
也可用For Loop写成:
var a_line="";
for (loop=0; loop width; loop++)
{
a_line = a_line + "x";
}
for循环的格式为:
for (initial value; test; increment)
{
do this stuff;
}
这样,上述for loop设置loop=0并持续加1直到loopwidth,这
和上例中while loop相同,仅是少了数行而已。都表示
“在a_line上加width次x”。
在我们练习使用循环之前应明白一件事:循环可以嵌套。这里
有一个关于嵌套循环的例子。
第六页:嵌套循环
这是程序:
var height = prompt("How high do you
want the grid? (1-10 is good)","10");
var width= prompt("How wide do you want
the grid? (1-10 is good)","10");
var a_line;
var new_window =
window.open("/webmonkey/98/04/files1a
/grid.html","looper","width=400,height=400");
new_window.document.writeln("h1A Grid/h1");
for (height_loop = 0; height_loop
height; height_loop++)
{
a_line = "";
for (width_loop = 0;
width_loop width; width_loop++)
{
a_line+="x";
}
new_window.document.writeln
(a_line + "br");
}
在请求高及宽后,打开一新窗口,并为它写一个头,进入for
循环。第一个for循环设a_line=“”。试一下不用该行做一下
本例,看看会发生什么。在初始化a_line后,程序进入下一个
for循环,当宽达到所需值后,建立X`S行并将它显现在新窗
口中。这些将发生height次。
好,现在你的任务:看一下这个循环练习并亲自试着在看源码
前写一个。
第七页:循环练习
循环练习程序要求一些字然后反向显示。试着自己写一下程
序,再看源码了解其原理。问题不大了吧,现在开始学习数组。
第八页:数组
我们已了解变量可是数字、字符串及对象参数。还有一个
Javascript的重要部分:数组。
数组是一种列表。各种列表比如名单、URL以颜色列表都可以存
储在数组中。
这里我们生成颜色的数组:
var colors = new Array("red","blue","green");
现在你就有了一个数组,你能对它做什么呢?数组的优点在于
数组中的各个元素可以通过数字调用。第一个元素的数字是0,
可以用以下方式调用:
var the_element = colors[0];
执行这一行JavaScript指令时,变量the_element所被赋予的值
是字符串"red" 。通过写出数组的名称并将数组中元素的顺序号
放在方括号内就可调用数组中的该元素。数组中第2个元素的顺
序号是1。
一旦生成数组后,你可以添加和修改数组值。如果你打算将颜
色数组的第1个元素有红色该为紫色,你可以这样做:
colors[0] = "purple";
数组经常用于循环。下文将讲数组和循环的应用。
第九页:数组和循环
数组是一项非常有用的东西,因为你可以循环调用数组中的各
个元素执行某项功能。以下是循环显示一个URL数组中的各个元素
的例子。
首先,要使该例子发挥作用,我们需要声明一些变量:
var url_names = new Array("hits.org","awaken.org","bianca.com");
var a_url;
接下来,我们循环调用数组中的各个元素,打开每
个URL并对待用户点击alert框的OK按钮:
for (loop = 0; loop url_names.length; loop++)
{
// make the name of a url, for example
a_url = "." + url_names[loop] + "/";
// open a window
var new_window=open(a_url,"new_window","width=300,height=300");
// wait for the click
alert("hit ok for the next site");
}
首先,你会注意到循环从0一直到url_names.length这个变量。
将.length放在数组名的后面由于告诉你数组中有多少个元素。
但是,注意数组元素的数目同数组最后一个元素的索引号(顺
序号)不同。如果数组中有3个元素,则数组的长度为3,但是
数组中最后一个元素的索引号却是array[2].。这是因为数组中
第1个元素的索引号是array[0].。如果你执行数组调用时得到
诸如"object not found" 的错误信息,而你的代码中有一个
数组,则有可能是因为你将数组元素的索引号同数组中元素的
数目混淆了。
不也许还会注意到将.length放在数组的结尾处很有点想给一个
对象附加一些属性。这是因为数组本身就是对象,而length就
是数组的一项属性。
数组术语对象的另一个表现是:你需要用新指令才能生成新的
数组。在上例中,url_names = new Array(......) 实际可以
解释为:生成一个新数组,用url_names对其做一个引用。你可
以注意到单词"new" 以这种方式被应用时,就生成了一个新的
对象。
循环中的第1行生成一个变量。其赋值为一个字符串。
a_url = "." + url_names[loop] + "/";
循环开始时,变量循环的初始值为0。url_names数组的第1个元
素是字符串"hits.org".,所以在第一次循环中,变量a_url等
值于字符串"".。
循环的下一行用该URL打开一个窗口
var new_window=open(a_url,"new_window","width=300,height=300");
由于每次打开窗口时我们给窗口起的名称都一样,所以在转到
新的URL时,不会打开许多窗口。如果我们在上例中去掉窗口
名称"new_window",则每次循环时就会打开一个新窗口。
循环的第3行只是打开一个alert框,并对待用户点击OK 按钮。
数组还可以由于其它元素,而不只是字符串。数组可以应用
于JavaScript文件对象模块(Document Object Model)的各个
方面。
第十页:文件目标模块中的数组
下面是onClick=""链接中的代码:
var change=prompt('Change which image (0 or 1)?','');
window.document.images[change].src='three.jpg';
本例打算用图片交换来演示数组如何介入DOM的。如果你用的
是IE3.0或Netscape2.0,赶紧升级。试一下本例,看一下源码。
document.image_name.src = 'some_image.gif';
为了做这事,每个图片都需命名到。若你不知要交换的图片
名,但却知道其在HTML页中的顺序。可以用它的DOM数来指定该
图片。
一个HTML文件中的第一个图片是document.images[0],第二个
是document.images[1],如此类推。若你想知道一个文件中有
多少个图片,你可检查图片数组长度知道:
document.imageslength。例如,你想改变你的网页中所有图形
为一个Spacer GLF图片,你可以这样做:
for (loop = 0; loop document.images.length; loop++)
{
document.images[loop].src = 'spacer.gif';
}
清楚了吧?
好。下面我们准备三步是函数。函数学习中,我们要做一些
练习,并有一些作业。
进入函数学习课程。
第十一页:函数
函数是编程需学的最后一个基本组成。所有的程序语言都是
函数。函数是一些角次可调用的、无须重写的东西。
如果你想教会自己快速阅读并且用一个一旦点击可告诉你当前
时间的长文本链接。
例如…时间!
看源码:
a href="#" onClick="
var the_date = new Date();
var the_hour = the_date.getHours();
var the_minute = the_date.getMinutes();
var the_second = the_date.getSeconds();
var the_time = the_hour + ':' + the_minute + ':' + the_second;
alert('The time is now: ' + the_time);"time!/a
在这里这段JavaScript的工作细节并不重要;一会我们再回来
复习一下。
重要的是它太长了。若这些时间链接再有10个,你须每次剪贴
这段程序。这使你的HTML既长且难看。另外,若你想改变这段
程序,就必须在10个不同地方改变。
你可以写一个函数来执行而不用作10次拷贝程序。这里的函数
使用变的即容易编辑又容易阅读。
请看如何写一段计时函数。
第十二页:无参数函数
该HTML页含有一个叫做announceTime的函数。从一个链接调用
annoumnceTime:
a href="#" onClick="announceTime();"time!/a
就象这样:
下行看起来就象第二课:
a href="#" onClick="alert('Hello!');"Hello!/a
这称为从一个链接调用警告对话框。函数就象一种方法,唯一不
同的是,方法依附于一个对象。在这个警告的例子中,这个对象
是一个窗口对象。
让我们回到函数本身。如果你看看源码,你将看到函数位于HTML
文件的头部中。
html
head
titleFunction with No Parameters/title
script langauge="JavaScript"
!-- hide me
function announceTime()
{
//get the date, the hour, minutes, and seconds
var the_date = new Date();
var the_hour = the_date.getHours();
var the_minute = the_date.getMinutes();
var the_second = the_date.getSeconds();
//put together the string and alert with it
var the_time = the_hour + ":" + the_minute
+ ":" + the_second;
alert("The time is now: " + the_time);
}
// show me --
/script
/head
body
...
/body
/html
好,让我们逐行复习这个函数。首先,所有函数来自于该种格式:
function functionName(parameter list)
{
statements ...
}
函数的命名规则于变量差不多。第一个字符必须是字母或一标准符
号。其余字符可为数字或一横线。但必须保证函数不于已定义的变
量同名。否则将出现很糟糕的结果。我是用内部大写的方式命名函
数以保证它们不与字符碰巧重名。
函数名后是一组参数。本例是无参数的函数,下一例中我们再举例
描述。
参数后是函数的主体。这是一组当函数调用后是想运行的语句。在
下面几个例子中,我打算利用这个报时器,所以让我描述一下它是
怎样工作的。
第一行:
var the_date = new Date();
取得一个新的日期对象。就象你在用数组时取得一个新的数组一
样,在你要找出即时是什么时间时你需要先取得一个日期对象。
当找到了一个新的日期对象,它自动重置到当前的日期和时间。
为了在对象以外得到这个信息,你必须使用这种对象方法:
这些方法从日期对象上取得了合适的数字。
var the_hour = the_date.getHours();
var the_minute = the_date.getMinutes();
var the_second = the_date.getSeconds();
你可能疑惑:我怎样能假定日期对象知道何种方式?甚或我如何
知道有这样一件事可作为日期对象?这些缘由应从Javascript
库中获取,我将尽我所能解释内置Javascript对象,但不一定能
彻底的使你清楚。
函数的其他部分就很清楚了。它以这种方式调用返回数字,把它
们变成字符串,并且调用警告方式以弹出一个字符串对话框。注
意你可以在函数内部调用一个方式和函数。我们将详尽讨论。
现在如果你也玩透了时间链接,你可能注意到了有些什么不对的
事。你每次可能会得到这样的反馈:“12:12:04”,这是
getSecond()将返回值为“4”。那么当你合成为时间时,你看到
的就是the_minute+“:”+the_second得到14:4而非是我们想要
的。解决它是个容易的事,需要个新的函数来修补分、秒合成值。
请看参数及返回值。
第十三页:参数及返回值
尽管无参数的函数在减少写源码工作量,HTML源码可读性上很
有用,但有参数的函数会更为有用。
上一例中,当返回的分、秒值小于10时会有问题发生。我们想
要看到的秒值是04而非4。我们可以这样做:
var the_minute = the_date.getMinutes();
if (the_minute 10)
{
the_minute = "0" + the_minute;
}
var the_second = the_date.getSeconds();
if (the_second 10)
{
the_second = "0" + the_second;
}
它会非常有效。但是注意,同样的源码你写了两次:若某件
东西小于10,则前面加“0”。所以要考虑当用同一代码要多
次重写时,用函数来做。本例中我写了一个叫fixNumber的函数:
function fixNumber(the_number)
{
if (the_number 10)
{
the_number = "0" + the_number;
}
return the_number;
}
fixNumber的参数是the_number。一个参数也是一个变量,当该
函数被调用时,其参数值也被设置。在本例中,我们这样调用
函数:
var fixed_variable = fixNumber(4);
参数the_number在函数中设置为4。到现在你应该对fixNumber
的主体有了一定的了解。它的意思是:如果变量the_number小
于10,则在它的前面加一个0。这里面新的内容是return指令:
返回the_number的值。在下面的情况中就会用到return指令:
var some_variable = someFunction();
变量some_variable的值是函数someFunction() 的返回值。
在fixNumber中,我加入: return the_number,则退出函数并
将返回the_number的值返回给任何一个等待被设置的变量。
所以,我这样书写代码:
var fixed_variable = fixNumber(4);
the_number的初始值将通过函数调用被设置为4,然后由于4小
于10,所以the_number将被改为"04"。然后the_number值被
返回,而且变量fixed_variable将被设置为"04" 。
为了将fixNumber包括在原始函数announceTime()中,我添加了
如下内容:
function announceTime()
{
//get the date, the hour, minutes, and seconds
var the_date = new Date();
var the_hour = the_date.getHours();
var the_minute = the_date.getMinutes();
var fixed_minute = fixNumber(the_minute);
var the_second = the_date.getSeconds();
var fixed_second = fixNumber(the_second);
//put together the string and alert with it
var the_time = the_hour + ":" + fixed_minute + ":" + fixed_second;
alert("The time is now: " +the_time);
}
假定时间链接被点击时,时间为12:04:05。用new Date()获得
日期,用getHours()获得小时,用前面所属方法获得分钟,分
钟在本例中应该是4, 然后调用fixNumber,其参数为the_minute:
var fixed_minute = fixNumber(the_minute);
当fixNumber()被调用时,参数the_number被设置为the_minute。
在本例中由于the_minute是4,所以the_number将被设置为4。
设置完参数后,我们进入函数主体。由于4小于10,the_number
被改变为"04",然后the_number值用return指令返回。当"04"
被fixNumber返回后,本例fixed_minute就等于"04"。
我们一步一步来研究该过程。假定时间为12:04:05。
我们从函数announceTime()开始
the_minute = the_date.getMinutes();则the_minute = 4
fixed_minute = fixNumber(the_minute);等于函
数fixNumber()并将其值返回给fixed_minute
现在进入函数fixNumber()
函数fixNumber(the_number)fixNumber()用the_minute的
值调用,the_minute值是4,所以现在the_number = 4
如果(the_number 10) {the_number = "0" +
the_number;}由于4小于10,所以the_number现在等于"04"
返回the_number值,退出该函数并返回值"04"
现在已经退出函数fixTime(),所以现在我们回
到announceTime()
该函数返回值为"04",所以fixed_minute 现在等于"04"
该例用了一个只有一个参数的函数。实际上你可以为函数
设置多个参数。例如该函数输入两个数组并返回一个元素
列表。
第十四页:多于一个参数的函数
这是我定义的一个数组:
var monkeys = new Array("mattmarg","wendy",
"kristin","tim","aaron", "luke");
var kittyphile = new Array("wendy", "ruby",
"roscoe", "tim");
var discophile = new Array("mattmarg",
"john travolta", "wendy");
var happy = new Array("tim", "wendy",
"stimpy", "aaron");
var cranky = new Array("ren", "mattmarg","luke");
随着这些数组的定义,arrayIntersect函数给出,我们可轻
而易举的发现那些网猴酷爱迪斯科:爱跳舞的网猴
注意到尽管John Travolta喜爱迪斯科,但他不在monkeys请
单中,则他就不是只爱跳舞的网猴为调用该函数值,可这么来:
a href="#" onClick="arrayIntersect('dancing
monkeys',monkeys,discophile);"dancing monkeys/a
这是个具有3个参数的函数:一个代表交叉的姓名,第一个数组,
及第二个数组。这也很容易发现爱猫的网猴名爱猫的网猴。
看一下源码:
a href="#" onClick="arrayIntersect('monkeys who love
cats',monkeys,kittyphile);"cat-loving monkeys/a
让我们看看arrayIntersect函数本身:
function arrayIntersect(intersect_name, array_1, array_2)
{
var the_list = "";
for (loop_1 = 0; loop_1 array_1.length; loop_1++)
{
for (loop_2 = 0; loop_2 array_2.length; loop_2++)
{
if (array_1[loop_1] == array_2[loop_2])
{
the_list = the_list + array_1[loop_1] + " ";
}
}
}
alert("the " + intersect_name + " are: "+ the_list);
}
看看你是否已经弄懂本例中的循环。关键是函数第一行:
function arrayIntersect(intersect_name, array_1, array_2)
这里定义了一个叫arrayIntersect的函数,它有3个参数。就象上
例,每个参数就象一个变量,当函数调用时赋值。因此,当函数被调
用时:
arrayIntersect('dancing monkeys',monkeys,discophile);
下列分配:
intersect_name = 'dancing monkeys'
array_1 = monkeys
array_2 = discophile
唯一需注意的是,你必须以正确的参数数目来调用函数。如果你一旦
象这样调用arrayIntersect:
arrayIntersect(monkeys,discophile);
将会出错。试一下看会发生什么错误。
在任一标准的Javascript程序中,函数都是基本的部件。因此理解其
工作原理极其重要。这里是一个测试你对这项工作理解多少的练习。
再综合地做一下本课中其它练习,再在你自己的浏览器中应用。