ECMAScript-Basics 2

  1. Es geht um Aussagen zu ECMAScript. Richtige Aussagen bitte anhaken.
    ECMAScript wurde vom W3C-Gremium entwickelt
    ECMAScript wird durch einen Compiler in .class-Bytecode übersetzt
    ECMAScript wird meist im Browser des Anwenders ausgeführt
    ECMAScript kann Arrays und Objekte verwenden
    ECMAScript wird für interaktive, dynamische HTML-Seiten eingesetzt
    ECMAScript kann direkt in eine HTML-Seite eingebettet werden
    In einer HTML-Seite können im header-Tag und im body-Tag mehrere script-Tags verwendet werden.
  2. Mithilfe der Ausführung von ECMAScript-Code im Browser können ...
    ... HTTP-Request's gesendet werden.
    ... im User-Dateisystem Dateien angelegt werden, wenn der Browser die Standard-Einstellung verwendet.
    ... ECMAScript-Anweisungen blockiert werden.
    ... in einer HTML-Seite Objekt-Styles gesetzt werden.
  3. Bei diesen Fragen wird der String s = '~!@#$%^&*(){}[]=:/,;?+\'"\\'; betrachtet. Welchen String liefert escape(s), encodeURI(s), encodeURIComponent(s) ?
    1.  <script>
    2.  var s = '~!@#$%^&*(){}[]=:/,;?+\'"\\';
    3.  
    4.  window.onload = function() {document.write("<pre>");
    5.   document.write("            escape(s) = " + escape(s));
    6.   document.write("\n         encodeURI(s) = " + encodeURI(s));
    7.   document.write("\n ncodeURIComponent(s) = " + encodeURIComponent(s)); 
    8.  }
    9.  </script>
    window.escape(s) liefert %7E%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%2C%3B%3F+%27%22%5C
    escape(s) ändert nicht die Zeichen @*&#47;+
    window.encodeURI(s) liefert ~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+'%22%5C
    encodeURI(s) ändert nicht die Zeichen ~!@#$&*()=:/,;?+'
    window.encodeURIComponent(s) liefert ~!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%2C%3B%3F%2B'%22%5C
    encodeURIComponent(s) ändert nicht die Zeichen ~!*()'
  4. Bei diesen Fragen geht es um die interne Darstellung von Unicode-Zeichen. Es werden die Funktionen escape() und unescape() sowie encodeURIComponent() und decodeURIComponent() verwendet, um die User-Funktionen encode_utf8() und decode_utf8() zu definieren. Richtige Aussagen bitte anhaken.
    1.  function encode_utf8(s) { return unescape( encodeURIComponent(s) );}
    2.  function decode_utf8(s) { return decodeURIComponent( escape(s) );}
    3.  
    4.  var i, h, s1 = 'α€ά', a1=[], s2 = encode_utf8(s1), a2=[];
    5.  for( i = 0; i < s1.length; i += 1) { 
    6.    h = s1.charCodeAt(i).toString(16);
    7.    a1.push('\\u'+ ('000' + h).slice(-4));
    8.  }
    9.  
    10.  for( i = 0; i < s2.length; i += 1) { 
    11.    h = s2.charCodeAt(i).toString(16); 
    12.    a2.push('\\u'+ ('000' + h).slice(-4));
    13.  }
    14.  window.onload = function() {
    15.   document.write("<br /> s1.length = " + s1.length);
    16.   document.write("<br /> s1 = " + s1 + "<br /> a1 = " + a1);
    17.   document.write("<br /> s2.length = " + s2.length);
    18.   document.write("<br /> s2 = " + s2 + "<br /> a2 = " + a2);
    Ein ECMAScript-Zeichen verwendet stets 2 Byte.
    Durch s1.charCodeAt(i) wird aus dem String s1 das i-te Zeichen geholt.
    Das Zeichen α entspicht &#945; oder &#x3b1; oder \u03b1.
    Für s1 = "α€ά"; ergibt s1.length = 3.
    Nach der Ausführung der ersten Schleife enthält der Array a1 die Strings "\u03b1", "\u20ac", "\u1f71"
    Infolge von s2 = encode_utf8('α€ά') enthält der String s2 die 8 Zeichen s2 = "α€ά"
    Nach der Ausführung der zweiten Schleife enthält der Array a2 die Strings "\u00ce", "\u00b1", "\u00e2", "\u0082", "\u00ac", "\u00e1", "\u00bd", "\u00b1"
  5. Kommentare im Quelltext
    ECMAScript-Anweisungen werden durch ein Semikolon abgeschlossen.
    Zeileninterne ECMASCript-Kommentare beginnen mit // und enden mit dem Zeilenende.
    Der String
     
    var str = "abc//" + 'ABC'; 
    
    wird wegen den //-Zeichen nach abc beendet.
    Die Sichtbarkeit von str
     
    {var str = "abc";} 
    
    ist der umschließende Block. Außerhalb des Blockes ist str undefined.
    Mehrzeilige Kommentare /*... */ können geschachtelt werden.
    Steht im HTML-body-Tag
    1.  <script>
    2.  if( window === this) {
    3.   document.write("<h1>Hallo Welt!</h1>");
    4.  }
    5.  </script>
    so an dieser Stellen eine h1-Überschrift ("Hallo Welt!") eingefügt.
  6. Hier geht es um die Falsch-Werte von ECMAScript. Welche Werte des a-Array liefern für !a[i] true?
    1.  var a = [false, 0, NaN, null, undefined, ''],  
    2.      b = [], i;
    3.  for (i=0; i < a.length; i +=1 ) { 
    4.    if( !a[i] ){  
    5.         b[i] = typeof a[i]; 
    6.    }
    7.  }
    8.  window.onload = function() {
    9.   document.write('a = ['+a+'];<br />');
    10.   document.write('b = ['+b+'];<br />'); 
    11.  }
    Nach dem Schleifendurchlauf ist b.length === a.length
    Nach dem Schleifendurchlauf ist
    a = [  false,      0,    NaN,       ,          ,       ];
    
    Nach dem Schleifendurchlauf ist
    b = [boolean, number, number, object, undefined, string];
    
  7. Wie sehen etwa die ausgegebenen Ergebnisse aus?
    1.  <script>
    2.  var a=['0', 'J'+'a','1'+1, 1.0, 1.e2, '1'/1, "AB",        NaN],
    3.      b=[ 0,  "Ja",    1,    1,   100,   1,   "\x41\u0042", NaN], 
    4.      c=[], d=[], e=[], i;
    5.  
    6.  for (i=0; i < a.length; i +=1 ) {
    7.    c[i] = (a[i] ==  b[i]);
    8.    d[i] = (a[i] === b[i]);
    9.    e[i] = typeof a[i];
    10.  }
    11.  
    12.  window.onload = function() {
    13.   document.write('c=['+c+'];<br />'); 
    14.   document.write('d=['+d+'];<br />');
    15.   document.write('e=['+e+'];<br />'); 
    16.  }
    17.  </script>
    c=[true,true,true,true,true,true,true,true];
    d=[false,false,false,true,true,true,true,true];
    e=[string,string,string,number,number,number,number,number];
    
    c=[true,true,false,true,true,true,true,false];
    d=[false,true,false,true,true,true,true,false];
    e=[string,string,string,number,number,number,string,number];
    
    c=[string,string,string,number,number,number,string,number];
    d=[true,true,false,true,true,true,true,false];
    e=[false,true,false,true,true,true,true,false];
    
  8. Wie sehen etwa die ausgegebenen Ergebnisse aus?
    1.  var a=[ 1, "2", "10","A","b", "2a",   1,    NaN,   1 ],
    2.      b=["0", 1,   1,   1,  1,  "a", Infinity,  1,  NaN],
    3.      c=[], i;
    4.  for (i=0; i < a.length; i += 1 ) {
    5.    c[i] = (a[i] > b[i]);
    6.  }
    7.  
    8.  window.onload = function() {
    9.    document.write('c=['+c+'];<br />'); 
    10.  }
    c=[true,false,true,false,false,false,false,true,false];
    c=[true,false,true,false,false,true,false,true,true];
    c=[true,true,true,false,false,false,false,false,false];
  9. Aus den a-Elementen werden mit '!' die b-Elemente, mit '!!' die c-Elemente und mit 'typeof' die d-Elemente gebildet. Die Arrays b, c,d enthalten dann ...
    1.  var a=[false,'',null,0, '0',1,true,'x'],
    2.      b=[], c=[],d=[], i;
    3.  
    4.  for (i=0; i < a.length; i +=1 ) {
    5.    b[i] = !a[i];
    6.    c[i] =!!a[i];
    7.    d[i] = typeof a[i];
    8.  }
    9.  
    10.  window.onload = function() {
    11.   document.write('b=['+b+'];<br />');
    12.   document.write('c=['+c+'];<br />'); 
    13.   document.write('d=['+d+'];<br />'); 
    14.  }

    b=[false, false, false,      -1,    0,  false,  true,  true]; 
    c=[ true,  true,  false,       0,    1,  true,   false, false]; 
    d=[string,number,boolean,string,object, boolean,string,number];
    
    b=[false, false, false,  false,  true,   true,  true,  true];  
    c=[true,  true,  true,   true,   false,  false, false, false];
    d=[string,number,boolean,string, boolean,string,object,number];
    
    b=[true,   true,  true,  true,  false, false, false,  false ];
    c=[false,  false, false, false, true,  true,  true,   true  ];
    d=[boolean,string,object,number,string,number,boolean,string];
    
    b=[true,   false, true,  false, true,  false, true,   false ];
    c=[false,  true,  false, true,  false, true,  false,  true  ];
    d=[boolean,string,object,number,string,number,boolean,string];
    
  10. Es geht um die Wirkungsweise von 3 Funktionen: count(), count_n(), count_anz().
    Bei der ECMAScript 5 - Syntax ist "use strict" erlaubt.
    Der Funktionsaufruf von der Variablen count_n gibt eine anonyme Funktion zurück. Ebenso count_anz.
    Weil bei einem Aufruf count() der Parameter undefined ist, setzt die Funktion count() intern x auf 1.
    Infolge der Funktionsaufrufe wird [7,7,7] angezeigt.
    1.  <script>
    2.  function count(x) { "use strict"; x = x || 1;
    3.    return (count.n += x);
    4.  }
    5.  
    6.  count.n = 0;
    7.  
    8.  var count_n = (function () { "use strict";
    9.      var n = 0; 
    10.      return function (x) { return (n += x); 
    11.      }; 
    12.  }());
    13.  
    14.  var count_anz = (function (key) { "use strict";
    15.      var o = { }; o[key] = 0;
    16.      return function (x) { 
    17.             return (o[key] += x); 
    18.      }; 
    19.  }('n'));
    20.  
    21.  
    22.  count(6);
    23.  count_n(5);
    24.  count_anz(4);
    25.  var arr = [count(),count_n(2),count_anz(3)];
    26.  window.onload = function() {
    27.                  document.write('['+arr+']'); 
    28.  } 
    29.  </script>