小妖女 发表于 2015-1-16 22:18:18

ASP教程之VBScript语法毛病

想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的vbscript|毛病|语法  假如VBScript语句布局违背了一个或多个VBScript剧本言语语律例则,就会发生VBScript语法毛病。VBScript语法毛病一般在实行程序前,编译程序时发生。十进制十六进制说 明1001800A03E9内存不敷1002800A03EA语法毛病1003800A03EB短少:1005800A03ED必要(1006800A03EE必要)1007800A03EF短少]1010800A03F2必要标识符1011800A03F3必要=1012800A03F4必要If1013800A03F5必要To1014800A03F6必要End1015800A03F7必要Function1016800A03F8必要Sub1017800A03F9必要Then1018800A03FA必要Wend1019800A03FB必要Loop1020800A03FC必要Next1021800A03FD必要Case1022800A03FE必要Select1023800A03FF必要表达式1024800A0400必要语句1025800A0401必要语句的停止1026800A0402必要整数常数1027800A0403必要While或Until1028800A0404必要While,、Until,或语句未停止1029800A0405必要With1030800A0406标识符太长1031800A0407有效的数字1032800A0408有效的字符1033800A0409未停止的串常量1034800A040A未停止的正文1037800A040D有效利用关头字Me1038800A040Eloop没有do1039800A040F有效exit语句1040800A0410有效for轮回把持变量1041800A0411称号重界说1042800A0412必需为行的第一个语句1043800A0413不克不及赋给非Byval参数1044800A0414挪用Sub时不克不及利用圆括号1045800A0415必要笔墨常数1046800A0416必要In1047800A0417必要Class1048800A0418必需在一个类的外部界说1049800A0419在属性声明中必要Let,Set或Get1050800A041A必要Property1051800A041B参数数量必需与属性申明分歧1052800A041C在类中不克不及有多个缺省的属性/办法1053800A041D类初始化或停止不克不及带参数1054800A041EPropertyLet或Set最少应当有一个参数1055800A041F不必要的Next1056800A0420只能在Property或Function或Sub上指定Default1057800A0421申明Default必需同时申明Public1058800A0422只能在PropertyGet中指定Default
内存不敷
分派与该盘算机无效内存一样多的内存。这多是一个静态分派数组增加得太年夜,大概是工具实例数量过量。
要改正该毛病

[*]利用Erase语句来从头分派静态数组的贮存空间。
[*]利用ReDim语句来从头分派贮存空间。
[*]封闭任何已翻开、不用需的使用程序,文件大概源文件。

语法毛病
创立的语句中违背了VBScript的语律例则。
要改正该毛病

[*]反省两遍表达式中元素的数量。
[*]寻觅直接的括号。

必要(
当创立历程申明时未包括开括号“(”,
Subfoox//x必要利用圆括号括起来。EndSub或利用redim语句。
Redimx//x必要利用圆括号括起来。要改正该毛病

[*]增加左(开)括号“(”。

必要)
试图封装一套括号中的表达式,但未包括闭括号“)”。必需用一套开括号和闭括号封装一些表达式。
要改正该毛病

[*]给请求值的表达式增加右(闭)括号“)”。

必要标识符
利用VBScript保存词作为变量称号。
要改正该毛病

[*]利用别的称号(一个不是VBScript保存词的称号)。
[*]以[]封装保存词。

必要=
利用Set语句,但未包括=。
要改正该毛病

[*]利用Set语句的完全语法。

必要If
创立了一个If...Then...Else块,但未一般停止块。块语句If必需为一行的第一个语句,且必需以EndIf停止。上面演示了一个If...Then...Else块的准确布局。
IfconditionThen
[statements]
[ElseIfcondition-nThen
[elseifstatements]]...
[Else
[elsestatements]]
EndIf要改正该毛病

[*]反省块If语句是不是以End语句。假如是的话,将它改成EndIf语句。

必要To
创立一个For...Next轮回,但没有在第一行中包括关头词To。一个For...Next轮回的第一行必需包括关头词To。上面演示了一个For...Next轮回的准确布局。
Forcounter=startToend[Stepstep]
[statements]
[ExitFor]
[statements]
Next要改正该毛病

[*]确保For...Next轮回包括了一切必需的部分。

必要End
创立布局但未一般停止。下表列出了必需以End语句停止的布局。
布局停止语句SubEndSubFunctionEndFunctionIfEndIfClassEndClassWithEndWithSelectEndSelect
要改正该毛病

[*]以EndSub语句停止一个Sub历程。
[*]以EndFunction停止一个Function历程。
[*]以EndIf语句停止一个If语句。
[*]以EndClass语句停止一个Class语句。
[*]以EndWith语句停止一个With语句。
[*]以EndSelect语句停止一个Select语句。

必要Function
创立一个Function历程,可是以关头词End停止,而不是以EndFunction语句停止。一个Function历程必需包括停止语句EndFunction。
要改正该毛病

[*]以语句EndFunction停止Function历程。

必要Sub
创立了一个Sub历程,可是利用关头字End停止而不是利用EndSub语句停止。一个Sub历程必需包括一个EndSub停止语句。
要改正该毛病

[*]利用EndSub语句停止Sub历程。

必要Then
创立了一个If...Then...Else停止,但在第一行中为包括关头字Then。上面的代码演示了If...Then...Else布局的准确利用。
IfconditionThenstatements[Elseelsestatements]大概可使用块情势语法:
IfconditionThen[statements][ElseIfcondition-nThen[elseifstatements]]...[Else[elsestatements]]EndIf要改正该毛病

[*]确保If...Then...Else布局包括了一切必需的部分。

必要Wend
创立了一个While...Wend轮回,可是没有准确停止轮回。一个While...Wend轮回必需利用语句Wend来停止。上面演示了一个While...Wend轮回的准确布局。
Whilecondition
Version[statements]
Wend要改正该毛病

[*]确保While...Wend轮回包括了一切必需的部分。

必要Loop
创立了一个Do轮回布局,但未一般中止轮回。Do轮回布局与Loop语句相干联合束。上面演示了Do轮回布局的准确利用。
Do[{While|Until}condition]
[statements]
[ExitDo]
[statements]
Loop大概可使用上面的语法:
Do
[statements]
[ExitDo]
[statements]
Loop[{While|Until}condition]要改正该毛病

[*]确保Do轮回布局包括了一切必需的部分。

必要Next
创立了一个For...Next轮回布局,但未一般停止轮回。一个For...Next轮回布局必需以一个Next语句停止。上面演示了一个For...Next轮回布局的准确布局。
Forcounter=startToend[Stepstep]
[statements]
[ExitFor]
[statements]
Next要改正该毛病

[*]确保For...Next轮回布局包括了一切必需的部分。

必要Case
创立Select...EndSelect机关,但未包括任何Case语句。上面演示了Select...EndSelect机关的准确利用办法。
SelectCasetestexpression
[Caseexpressionlist-n[statements-n]]...
[CaseElseexpressionlist-n[elsestatements-n]]
EndSelect要改正该毛病

[*]确保Select...EndSelect机关包括一切必需的部分。

必要Select
创立了一个Select...EndSelect布局,但未包括停止语句EndSelect。上面演示了Select...EndSelect布局的准确利用办法。
SelectCasetestexpression
[Caseexpressionlist-n[statements-n]]...
[CaseElseexpressionlist-n[elsestatements-n]]
EndSelect要改正该毛病

[*]确保Select...EndSelect布局包括了一切必需的部分

必要表达式
创立一个Select...EndSelect布局,但包括一个Case分句。CaseElse语句(失利的情形)必需在它本人那一行呈现。上面演示了Select...EndSelect布局的准确利用。
SelectCasetestexpression
[Caseexpressionlist-n[statements-n]]...
[CaseElseexpressionlist-n
[elsestatements-n]]
EndSelect要改正该毛病

[*]为CaseElse语句另起一行。

必要语句
作为参数传送给Execute语句的字符串没法被剖析为一个语句。Execute语句不克不及被用来静态实行VBScript代码。比方,思索以下的VBScript代码。
Execute"msgbox1"由于msgbox是一个语句,以是无效。
Execute"5*4"因为5*4没法被注释为一个语句以是失利。不单单是Execute和Eval,在任何必要一个语句的剧本代码的编译过程当中也发生Expectedstatement毛病。比方,以下代码在InternetExplorer中形成这个毛病,
<html>
<scriptlanguage=vbscript>
5*4
</script>
</html>注重这里有两个在VBScript中分歧且有关的语句,

[*]编译并实行不事情语句的Execute语句,
[*]Execute办法.
要改正该毛病

[*]确保传送给Execute语句的字符串为一个语句。
[*]假如请求值的字符串为一个表达式,利用Eval。

必要语句的停止
在语句开头外呈现笔墨。
要改正该毛病

[*]移往分外的笔墨。
[*]假如要正文代码行,在语句的开头处拔出单引号""。

必要整数常数
试图在Dim语句中利用十分数创立一个数组。在VBScript中,Dim语句中巨细值必需为一个常数。比方,
Dima(10)无效。
Dima(x)有效。
Dima(1=2)有效要改正该毛病

[*]利用ReDim语句

必要While或Until
创立了一个Do轮回,可是未包括相干的While或Until关头词。一个Do轮回的测试前提必要在测试前提语句中利用一个While或Until关头词。上面演示一个Do轮回的准确布局。
Do[{While|Until}condition]
[statements]
[ExitDo]
[statements]
Loop大概可使用语法:
Do
[statements]
[ExitDo]
[statements]
Loop[{While|Until}condition]要改正该毛病

[*]确保Do轮回包括了一切必需的部分。

必要While、Until或语句停止
创立了一个Do轮回,可是未包括相干的关头词While或Until。一个Do轮回的测试前提必要在测试前提语句中利用一个While或Until关头词。上面演示了一个Do轮回的准确布局。
Do[{While|Until}condition]
[statements]
[ExitDo]
[statements]
LoopOr,youcanusethissyntax:
Do
[statements]
[ExitDo]
[statements]
Loop[{While|Until}condition]要改正该毛病

[*]确保Do轮回包括了一切必需的部分。
[*]利用关头字While或Until来停止Do轮回。loopwitheithertheWhileorUntilkeywords。

必要With
创立了一个With块,可是以关头词End而不是语句EndWith停止。一个With块必需利用一个EndWith语句停止。上面演示了With块的准确构成。
Withobject
 statements
EndWith要改正该毛病

[*]假如利用关头词End停止一个With块,将它改成EndWith语句。
[*]确保With把持布局了一切必需的部分。

标识符太长
创立了一个包括态多字符的变量或函数称号。限定为255个字符。
要改正该毛病

[*]选择一个较短的称号。

有效数字
表达式的一个值太年夜或超越局限。
<P>要改正该毛病

[*]利用较小的值。

有效字符
在一个表达式中试图利用双字节字符集(DBCS)或其他不被撑持的字符。
<P>要改正该毛病

[*]将不被撑持的字符封装在方括号[]中。

未停止字符串常数
没有效关闭的引号来停止字符串常数。字符串常数必需用一对引号来关闭。
<P>要改正该毛病

[*]在字符串尾部加上关闭的引号。

有效利用关头词Me
试图利用Set给标识符Me赋值。Me是一个被保存的标识符,且不克不及被设定。
要改正该毛病

[*]将变量的称号改成与Me分歧。

loop没有do
创立了一个Do轮回,但未准确地创建轮回。Do轮回以Do语句入手下手。上面演示了一个Do轮回的准确布局。
Do[{While|Until}condition]
[statements]
[ExitDo]
[statements]
Loop大概可使用这个语法:
Do
[statements]
[ExitDo]
[statements]
Loop[{While|Until}condition]要改正该毛病

[*]在不删除Loop语句的情形下大概试图删除一个Do把持布局。
[*]确保Do轮回包括了一切必需的部分。

有效exit语句
在以下程序把持布局之一中利用了Exit语句:

[*]With语句。
[*]If...Then...Else语句。
[*]SelectCase语句。
仅在以下布局中能够正当利用Exit语句来加入:

[*]Do...While轮回(ExitDo)。
[*]For...Next轮回(ExitFor)。
[*]ForEach...Next轮回(ExitFor)。
[*]Function历程(ExitFunction)。
[*]Sub历程(ExitSub)。
要改正该毛病

[*]大概不得当地利用了ExitIf,ExitWith,或ExitSelect。
[*]不要和If,With,Select语句一同利用Exit。

有效for轮回把持变量
创立了一个For...Next轮回。换句话说,大概在For...Next中利用了一个不法的把持变量。上面的代码演示了一个For...Next轮回的准确布局。
Forcounter=startToend[Stepstep]
[statements]
[ExitFor]
[statements]
Next要改正该毛病

[*]修正For...Next轮回的把持变量,使其在外轮回的局限内独一。

称号重界说
声了然一个在剧本其他中央已利用的称号。
要改正该毛病

[*]改动标识符称号使其在剧本的全局局限内独一。

必需为行的第一个语句
代码的多语句行包括了一个If...Then...Else语句,但If...Then...Else语句不是转业的第一个语句。If...Then...Else语句必需为行的第一个语句。
要改正该毛病

[*]将If或Else语句挪动到新的一行。

挪用Sub时不克不及利用圆括号
未利用Call挪用子程序,可是利用了圆括号()。当不利用Call语句挪用子程序时,不要利用圆括号。
要改正该毛病

[*]在挪用子程序的中央移往圆括号。
[*]改用Call语句挪用子程序。

必要笔墨常数
声明常数,可是付与其变更的表达式(能够变更的值)。常数不克不及包括运转时期码。
要改正该毛病

[*]当声明常数时不利用表达式。

必要In
创立一个ForEach...Next块,但在第一行未包含关头词In。上面演示了ForEach...Next块的准确布局。
ForEachelementIngroup
 [statements]
 [ExitFor]
 [statements]
Next[element]要改正该毛病

[*]确保ForEach...Next块包括了一切必需的部分。

必要Class
创立一个Class历程,可是以关头词End停止,而不是利用语句EndClass。一般利用EndClass语句停止Class历程。
<P>要改正该毛病

[*]利用EndClass语句停止Class历程。

必需在一个类的外部界说
创立了一个Property历程(PropertyLet,PropertySet,或PropertyGet),可是在Class界说的内部举行了界说。只能在统一类内里创立Property历程。
<P>要改正该毛病

[*]确保一切的PropertyLet,PropertySet和PropertyGets在一个Class界说内里界说了。

在属性声明中必要Let或Set或Get
创立了一个PropertyLet,PropertySet,或PropertyGet语句,但未包括关头词Let,Set,或Get。Property语句前面必需带Let,Set,或Get。
<P>要改正该毛病

[*]确保Property语句前面跟Let,Set,或Get。

必要Property
创立了一个Property历程(PropertyLet,PropertySet,或PropertyGet),但未利用EndProperty语句停止历程。Property历程必需以EndProperty语句停止。
<P>要改正该毛病

[*]确保Property历程以EndProperty语句停止。

参数数量必需与属性申明分歧
所申明的参数数量太少了。当利用PropertyLet或PropertySet,参数数量必需比响应的PropertyGet前往的数字年夜1。
<P>要改正该毛病

[*]确保PropertyLet和PropertySet最少比由PropertyGet.前往的参数数量多1。

在类中不克不及有多个缺省的属性/办法
在类界说中标志了多于一个的缺省属性或办法。在类中只能有一个缺省的属性和办法。
<P>要改正该毛病

[*]确保该类只要一个缺省的属性和办法。

类初始化或停止不克不及带参数
类界说带有Class_Initialize事务或Class_Terminate事务。这些历程有一个或更多的参数。不要给这些历程指定参数。
<P>要改正该毛病

[*]从类界说中移往参数。

PropertySet或Let最少应当有一个参数
申明了一个没有参数的类的Set或Let句柄的会见者。
<P>要改正该毛病

[*]增添一个参数给属性会见者。

不必要Next
创立了一个For...Next大概ForEach...Next机关,但没有包括For语句。比方,在试图往失落For...Next机关时保存了Next语句。上面演示了For...Next机关的准确用法。
Forcounter=startToend[Stepstep]
[statements]
[ExitFor]
[statements]
Next<P>要改正该毛病

[*]加上For语句(轮回把持语句)。
[*]往失落过剩的Next语句。

只能在PropertyGet中指定Default
对PropertyLet或PropertySet利用了保存字Default。只能对PropertyGet指定保存字Default。
<P>要改正该毛病

[*]只对PropertyGet指定保存字Default。
Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来;

飘飘悠悠 发表于 2015-1-18 17:56:55

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

不帅 发表于 2015-1-22 19:54:23

跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组

精灵巫婆 发表于 2015-1-31 11:18:12

封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。

透明 发表于 2015-2-6 19:09:01

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

海妖 发表于 2015-2-18 08:58:26

学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。

老尸 发表于 2015-3-6 03:29:44

Session:这个存储跟客户端会话过程的数据,默认20分钟失效

爱飞 发表于 2015-3-12 19:46:14

在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。

只想知道 发表于 2015-3-20 02:20:15

下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...
页: [1]
查看完整版本: ASP教程之VBScript语法毛病