SCOPING
var i = 0;
function demo() {
for (i = 0; i < 10; i++) {
// blah
}
}
demo();
//what is i?
function demo() {
i = 50;
}
demo();
// what is i
var i = 0;
function demo() {
for (var i = 0; i < 10; i++) {
// blah
}
}
demo();
//what is i?
function demo() {
var i = 50;
}
demo();
// what is i
FOR LOOPS
for ([initialisation]; [condition]; [final-expression])
statement
Scenario 1: for (var i=0; i<10; i++) {}
Scenario 2: for (; i<10; i++) {}
Scenario 3: for (var i=10;; i++) {}
Scenario 4: for (var i=10; i<10;) {}
Scenario 5: for (; i<10;) {}
Scenario 6: for (;;) {}
EVAL
function setspan(num, text) {
eval("myspan"+num+".innerText" = "'"+text+"'");
}
eval("var a = 'awesome';");
print(a);
function doSomething(someValue) {
// …
}
setTimeout(“doSomething(‘times up’);”, 3000);
var sum = new Function(‘op1’, ‘op2’, ‘return op1 + op 2;’);
var result = sum(10, 20);
WITH
oo.ee.oo.ah_ah.bing = true;
oo.ee.oo.ah_ah.bang = true;
with (oo.ee.oo.ah_ah) {
bing = true;
bang = false;
}
oo.ee.oo.ah_ah.bing = true;
oo.ee.oo.ah_ah.bang = true;
var x = oo.ee.oo.ah_ah;
x.bing = true;
x.bang = false;
ARRAY
var a = new Array(5);
// length of array?
var b = new Array(5, 6);
// length of array?
var a = [];
// length of array?
var b = [5, 6];
// length of array?
ES5+
var buffer = new ArrayBuffer(16);
var int32View = new Int32Array(buffer);
EQUALITY
var x = “123”;
var y = 123;
x == y;
‘’ == ‘0’
0 == ‘’
false == ‘false’
false == ‘0’
false == undefined
false == null
null == undefined
‘ trn’ == 0
‘’ === ‘0’
0 === ‘’
false === ‘false’
false === ‘0’
false === undefined
false === null
null === undefined
‘ trn’ === 0
SEMICOLON
function x() {
return
5
}
x();
COMMA
var a = 1,2;
var b = 1,2,3;
var c = 99+1,99;
var j=0;
for (var i=0;i<10;i++, j++) {}
var r = [], n = 0, a = 0, b = 1, next;
function nextFibonacci() {
next = a + b;
return b = (a = b, next);
}
while(n++ < 10) {
r.push(nextFibonacci());
}
STRICT MODE
• What does it do?
• ECMAScript 3 deprecated methods raise exceptions
• Unassigned variables throw exceptions
• Delete throws exceptions
• Duplicate properties throw exceptions
• Hijacking eval throws exceptions
• Eval code is sandboxed
• With is gone
• MORE!!!
• Full info: http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-
mode/
“use strict”;
oo.ee.oo.ah_ah.bing = true;
oo.ee.oo.ah_ah.bang = true;
with (oo.ee.oo.ah_ah) { // error
bing = true;
bang = false;
}
var foo;
delete foo;
NUMBER
0.1 + 0.2 === 0.3
(((a + b) + c) + d) === ((a + b) + (c + d))

JavaScript Gotchas

  • 1.
  • 2.
    var i =0; function demo() { for (i = 0; i < 10; i++) { // blah } } demo(); //what is i?
  • 3.
    function demo() { i= 50; } demo(); // what is i
  • 4.
    var i =0; function demo() { for (var i = 0; i < 10; i++) { // blah } } demo(); //what is i?
  • 5.
    function demo() { vari = 50; } demo(); // what is i
  • 6.
  • 7.
    for ([initialisation]; [condition];[final-expression]) statement Scenario 1: for (var i=0; i<10; i++) {} Scenario 2: for (; i<10; i++) {} Scenario 3: for (var i=10;; i++) {} Scenario 4: for (var i=10; i<10;) {} Scenario 5: for (; i<10;) {} Scenario 6: for (;;) {}
  • 8.
  • 9.
    function setspan(num, text){ eval("myspan"+num+".innerText" = "'"+text+"'"); } eval("var a = 'awesome';"); print(a); function doSomething(someValue) { // … } setTimeout(“doSomething(‘times up’);”, 3000); var sum = new Function(‘op1’, ‘op2’, ‘return op1 + op 2;’); var result = sum(10, 20);
  • 10.
  • 11.
    oo.ee.oo.ah_ah.bing = true; oo.ee.oo.ah_ah.bang= true; with (oo.ee.oo.ah_ah) { bing = true; bang = false; }
  • 12.
    oo.ee.oo.ah_ah.bing = true; oo.ee.oo.ah_ah.bang= true; var x = oo.ee.oo.ah_ah; x.bing = true; x.bang = false;
  • 13.
  • 14.
    var a =new Array(5); // length of array? var b = new Array(5, 6); // length of array?
  • 15.
    var a =[]; // length of array? var b = [5, 6]; // length of array? ES5+ var buffer = new ArrayBuffer(16); var int32View = new Int32Array(buffer);
  • 16.
  • 17.
    var x =“123”; var y = 123; x == y;
  • 18.
    ‘’ == ‘0’ 0== ‘’ false == ‘false’ false == ‘0’ false == undefined false == null null == undefined ‘ trn’ == 0
  • 19.
    ‘’ === ‘0’ 0=== ‘’ false === ‘false’ false === ‘0’ false === undefined false === null null === undefined ‘ trn’ === 0
  • 20.
  • 21.
  • 22.
  • 23.
    var a =1,2; var b = 1,2,3; var c = 99+1,99;
  • 24.
    var j=0; for (vari=0;i<10;i++, j++) {} var r = [], n = 0, a = 0, b = 1, next; function nextFibonacci() { next = a + b; return b = (a = b, next); } while(n++ < 10) { r.push(nextFibonacci()); }
  • 25.
  • 26.
    • What doesit do? • ECMAScript 3 deprecated methods raise exceptions • Unassigned variables throw exceptions • Delete throws exceptions • Duplicate properties throw exceptions • Hijacking eval throws exceptions • Eval code is sandboxed • With is gone • MORE!!! • Full info: http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict- mode/
  • 27.
    “use strict”; oo.ee.oo.ah_ah.bing =true; oo.ee.oo.ah_ah.bang = true; with (oo.ee.oo.ah_ah) { // error bing = true; bang = false; } var foo; delete foo;
  • 28.
  • 29.
    0.1 + 0.2=== 0.3 (((a + b) + c) + d) === ((a + b) + (c + d))

Editor's Notes