Op deze pagina staat een overzicht van de belangrijkste verschillen tussen VBScript en Javascript, vooral gericht op webdevelopment en het gebruik van SQL server.
Ik heb deze verzameling aangelegd tijdens het maken van (web)pagina's met scripts, omdat ik de syntaxen van deze talen nog wel eens doorelkaar haal.
Aangezien ik op het web niet een website vond die dit naar mijn smaak op een overzichtelijke en complete wijze presenteert, heb ik zelf een lijstje opgesteld die ik tijdens mijn werk raadpleeg (en aanvul).
Stuur je opmerkingen of aanvullingen naar e-mail.
Legenda kleurcoderingen:
Case sensitive | Regelovergang: afsluiten | Regelovergang: doorlopen | Declararatie: algemeen |
Declararatie: algemeen | ... | ||
Database Koppelingen | ... | ||
tip: door te dubbelklikken keer je vanuit elke positie weer terug naar de top van de pagina |
Onderdeel | VBScript | Javascript |
Case-sensitive | Nee (of nee of NeE) | Ja, Ja en nog eens Ja |
Regel afsluiten | geen (gewoon [Enter]) 'zie ook regel doorlopen' | ; |
Regel laten doorlopen | _ (underscore) en [Enter] | geen (gewoon [Enter]) |
Declaratie | Declareren én toekennen kan niet tegelijk! Dim x, y Dim z z = 10 noot: bij voorkeur "Option Explicit" gebruiken (evt. na ontwikkeling uitcommentariëren |
var variable1 [ = value1 ] [, variable2 [ = value2], ...]; var V; var W = "string"; var Z = 10, X, Y = 0; var X = Y = Z = 10; Namen voor variabelen moeten voldoen aan de volgende regels: (let op hoofdletter gebruik!) |
Declaratie constanten | Const X = 10 Const Y = 20, Z = 99 |
geen Constanten type. |
Declaratie objecten | Set <objnaam> = [<objexpressie> | New <classname> | Nothing] <objectexpressie> = CreateObject(applnaam.typenaam [, serverlocatie]) <objectexpressie> = GetObject([path naar file die object omvat] [, class]) Dim objX, oFs, oFs2, oDrv Set oFs = CreateObject("Scripting.FileSystemObject") Set oDrv = oFs.GetDrive(fso.GetDriveName(drvPath)) [...programmacode...] Set objFs = Nothing 'aan einde ojectvar weer vrijgeven In een asp pagina, moet je een speciek serverobject instantiëren: Set oFs2 = Server.CreateObject("Scripting.FileSystemObject") 'in asp pagina. |
var <objnaam> = new [Objecttype]([data type]) [Objecttype], Er zijn 11 'built-in' objecttypen: Array, Boolean, Date, Function, Global, Math, Number, Object, RegExp, Error en String. var objObj = new Object(); // Creëert generiek object zonder properties. var oDate = new Date(<evt datum>); // Creëert Date object. Kunt ook eigen objecten definiëren, met constructor, bijv: function Auto (deuren, kleur) { this.aantaldeuren = deuren; this.lakkleur = kleur; } var oAuto = new Auto(3,"rood"); |
Data typen | Eén Data Type: Variant (en meerdere Subtypes). Dit type kan alle soorten gegevens omvatten, waarbij het type veelal wordt gedefinieerd door de situatie. (onder constructie) |
primaire: String, Number & Boolean. samengestelde: Array & Object. specials: Null (toekenning zonder type) & Undefined (return value als variabele gedeclareerd, maar zonder waarde). |
Dialoog box |
Twee functies: [ReturnValue=] MsgBox(tekst[, knoppen][, titel dialoogbox][, helpfile, context]) intX = MsgBox("Is dit duidelijk?", 3, "Vraagje") (meer details) [ReturnValue=] InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context]) strX = InputBox("Geef je input") |
Drie window object methods: alert("paperlepap") blnX = confirm("Is dit duidelijk?") strX = prompt("Geef je input", <default waarde>) |
Functies: # Definitie | twee typen: function & procedure (procedure heeft geen return waarde) function <functienaam>[(argu,menten)] <statements> [Exit Function] <functienaam> = <expressie> End Function Sub <procedurenaam>[(argu,menten)] <statements> [Exit Sub] <statements> End Sub |
één type: function function <functienaam>([argu,menten]) { <statements>; return <expressie>; } |
Functies: # Aanroep | twee manieren (met of zonder Call): strX = <functienaam> [argu,menten] strX = Call <functienaam>[(argu,menten)] <procedurenaam> [argu,menten] Call <functienaam>[(argu,menten)] n.b. een procedure-aanroep kan niet onderdeel zijn van een expressie. |
<functienaam>([argu,menten]) |
Array's | Dim <arraynaam> Dim <arraynaam>() {dyn. array, lengte 0} Dim <arraynaam>(2) {stat. array, lengte 3} <arraynaam>(2) = 99 {toewijzen waarde} herdimensioneren: Redim <arraynaam>(3) {herdimensioneren} Redim preserve <arraynaam>(3) {idem, data behouden} Dim <arraynaam>(2,3) {stat. 2-dim.array, lengte 2x3} Redim <arraynaam>(2,4} {kunt alleen laatste dimensie herdim.} x = <arraynaam>(2) {toekennen waarde in arraypositie 2} x = <arraynaam>(2,3) {idem , positie 2,3} |
var <arraynaam> = new Array(0) {lengte 0} var <arraynaam> = new Array(2) {lengte 3} var <arraynaam> = new Array(1,"twee") of [1,"twee"] {direct waarden toekennen} herdimensioneren: var <arraynaam> = new Array(1) {en ...} <arraynaam>[2] = 99 {uitbreiden tot lengte 3} var <arraynaam> = new Array(2,3) {2-dim array 2x3} x = <arraynaam>[2] x = <arraynaam>[2][3] |
Array als argument in functie-aanroep | <functienaam>(<arraynaam>()) MijnFunctie(mijnarray()) |
<functienaam>(<arraynaam>[]) MijnFunctie(mijnarray[]) |
Commentaar (binnen een script) |
' {enkel quootje} <script language=vbscript> <!-- <statements> ' hier zet ik wat commentaar. <statements> --> </script> |
// {dubbel forwardslash} <script language=javascript> <!-- <statements> // hier zet ik wat commentaar. <statements> //--> </script> |
Strings en quotes | Stringkarakter: " (noot: een enkele quote (') is commentaar!) Escapen met een extra dubbele quote ("): "". Voorbeelden: en in server-side code: |tbd|> |
Stringkarakter: ' of " (enkele quote heeft voorkeur) Escapen met een backslash (\): \' (of gebruik een dubbele quote " ipv enkele). Voorbeelden: en in geval van het gebruik van dubbele quotes: |
String concatenatie | & resultaat = expressie1 & expressie2 noot: resultaat is een string als een van beide expressies een string is. voorbeelden (Str is identiek): |
+ resultaat = expressie1 + expressie2 noot: resultaat is een string als een van beide expressies een string is. voorbeeld: |
Control Flow: |
If <condition> Then <statements> [Else <else statements>] End If If <condition> Then [statements] [ElseIf <condition> Then <elseif statements>] [Else <else statements>] End If 'single-line syntax': If <condition> Then <statement1> [: <statement n>] noot: haakjes rond condities zijn niet verplicht, maar wel aan te raden. |
if (<condition>) { <statements;>} [else { <statements;>}] if (<condition>) <statement;> else <statement;>? if (<condition>) { <statements;>} [else { if (<condition>) { <statements;>} }] 'single-line syntax': if (<condition>) <statement>;[<statements>;] alternatief: <conditie> ? <statement1> : <statement2> strS=(now.getHours()>18) ? "avond" : "dag"; noot: zie ook item 'condities' |
Control Flow: |
For <counter> = <start> To <end> [Step <step>] [statements] [Exit For] [statements] Next voorbeeld (tabel maken met teller info): document.write("<table><tr>") Teller = 0 For X = 1 To 10 Teller = Teller + X document.write("<td>" & Teller & "</td>") Next document.write("</tr>"</table>) |
for (<init statement1> [,<statements>]; <test>; <increment>) { [statements] [break] [statements] } voorbeeld (tabel maken met teller info): document.write('<table><tr>'); for (teller=1, x=1; x<=10; x++) { teller = teller + x; document.write('<td>' + teller + '</td>'); } document.write('</tr></table>'); noot: ook increment sectie mag uit meerdere delen bestaan, bijv. "i++,n++". |
Control Flow: |
Select Case (expressie) Case <waarde1> [statements] Case <waarde2> [statements] Case Else [statements] End Select |
switch (expressie) { case <waarde1>: [statements;] [break;] case <waarde2>: [statements;] [break;] default: [statements;] } |
Operatoren: |
X <operator> Y |
X <operator> Y |
Error Handling | - Err.Raise<nr> (generate a run-time error). - Err.Clear (reset Err object info). |
Geen specifieke error-handling, maar wel zelf fout-afhandeling te creëren: Alternatieven zijn: - xxx=null, onderdrukt alle foutmeldingen. vb1: <img src=”corrupt.gif” onError=”null”> vb2: <script>window.onerror=null</script> - xxx=functienaam, welke na een run-time error wordt aangeroepen, ondersteunt de argumenten tekst, betreffende url en betreffende regelnummer. vb3: <script> window.onerror=myErrFunction function myErrFunction(msg, url, line) {…} </script> try { tryStatements } catch(exception) { catchStatements } finally { finallyStatements } |
Code koppelen aan events | Verschillende manieren: <SCRIPT language="VBScript" event="OnClick" for="Button1"> […] 'geen expliciete sub of function nodig </SCRIPT> <SCRIPT language="VBScript"> Sub <buttonname>_<event> […] End Sub </SCRIPT> <’Tag' … onclick="Procedurenaam(); return false;" language="vbscript"> <SCRIPT language="VBScript"> Sub Procedurenaam() […] End Sub </SCRIPT> <’Tag’ … onclick=’instructie1: instructie2’ language="vbscript"> |
<’Tag' … onclick="Procedurenaam(); return false;" language="jscript"> <’Tag’ … onclick="instructie1; instructie2" language="javascript"> |
SQL Queries worden hier nader toegelicht. |
||
Onderdeel | VBScript | Javascript |
Connection object | Dim conn, connstring connstring = <odbc/oledb connectionstring> Set conn = Server.CreateObject("ADODB.Connection") conn.Open connstring [...code..] conn.Close set conn = Nothing |
var conn = new ActiveXObject('ADODB.Connection'); var connstring = <odbc/oledb connectionstring> conn.ConnectionString = connstring; conn.Open(); (of direct conn.Open(connstring) ) [...code...;] conn.Close(); {opruimen conn} |
Uitvoeren van SQL Queries met het Connection Object (voor 'eenmalige' queries) |
<!- METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" Type="..." --> Dim conn, connstring, strQuery [, results, artiest, titel] Set conn = Server.CreateObject("ADODB.Connection") connstring = Application("DbConnString") conn.Open connstring strQuery = "SELECT ..." [results =] conn.Execute strQuery,,adCmdText + adExecuteNoRecords [artiest = results("artiest");] [titel = results("titel");] |
var conn = new ActiveXObject('ADODB.Connection'); var connstring = Application.Contents('DbConnString'); conn.Open(strConnectionString); var strQuery = "SELECT ..."; [var results = ] conn.Execute strQuery; {# nog uitzoeken Execute optieparameters) [var artiest = results('artiest');] [var titel = reults('titel');] |
Uitvoeren van SQL Queries met het Connection Object én RecordSet | Dim conn, rs, connstring, strQuery connstring = Application("DbConnString") strQuery = "SELECT artiest, titel FROM Artiesten WHERE ..." Vervolgens 2 mogelijkheden (waarbij de eerste impliciet het connection object gebruikt): rs.Open strQuery, conn conn.Open connstring Set rs = conn.Execute(strQuery) While Not rs.EOF Response.Write(rs("Artiest") & " - " & rs("Titel")) rs.MoveNext Wend If rs.RecordCount >= 5 Then {.....} rs.Close Set rs = Nothing conn.Close Set conn = Nothing De Open method van rs ondersteunt een optionele cursor parameter. Hiermee kun je door de Rs navigeren. Door het toevoegen van de parameter adOpenKeyset kun je nog ruimer door de Rs navigeren. Daarnaast kun je de property RecordCount gebruiken. |
var conn = new ActiveXObject('ADODB.Connection'); var connstring = Application.Contents('DbConnString'); conn.Open(connstring); var strQuery = "SELECT ..."; for( var rs = conn.Execute(strQuery); !rs.EOF; rs.moveNext() ) Response.Write(rs('Artiest').Value + " - " + rs('Titel').Value) rs.Close() rs = Nothing conn.Close() conn = Nothing |
Uitvoeren van SQL Queries met het >Command Object | Met het Command Object kun je, analoog aan het uitvoeren van queries met het
Connection en Recordset object, queries uitvoeren op de database. Echter, met het
Command object kun je een query klaarzetten en precompilen op de database en daarna
deze meerdere malen aanroepen met verschillende data. Dim conn, rs, connstring, strQuery connstring = Application("DbConnString") strQuery = "INSERT INTO (artiest, titel) VALUES (?) ?? Set conn = Server.CreateObject("ADODB.Connection") conn.Open connstring Set cmn = Server.CreateObject("ADODB.Command") Set cmn.ActiveConnection = cnn cmn.CommandText = strQuery cmn.Prepared = True cmn.Parameters.Append cmn.CreateParameter("artiest",varchar,,255) cmn.Parameters.Append cmn.CreateParameter("titel",varchar,,1024) cmn("artiest") = "U2" cmn("titel") = "Boomerang II" cmn.Execute ,,adCmdText + adExecuteNoRecords cmn("artiest") = "U2" cmn("titel") = "Pride" cmn.Execute ,,adCmdText + adExecuteNoRecords |
TBD |
Beheersen van Database verbindingen | Timing Out Set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionTimeout = <seconden> De default waarde is 30 seconden. Pooling Connections by default, SQL Server past Connection Pooling toe als de CPTimeout op 60 seoconden wordt gezet. |