A bunch of Javascript idiosyncrasies to beginners.
Switch branches/tags
Nothing to show
Clone or download
miguelmota Merge branch 'qwertmax-master'
* qwertmax-master:
  unary operators
  increment and decrement operators with jsbin
  increment and decrement operators
Latest commit 320b841 Sep 23, 2017
Permalink
Failed to load latest commit information.
.gitignore
LICENSE
README.md

README.md

JavaScript idiosyncrasies

This is a collection of things in JavaScript that may not be well recognized, espcially to beginners.

Disclaimer: Some of these snippets are simply to demonstrate the quirky parts of JavaScript and by no means encourage best practices and should never be seen in production code.


Q. What's the result?

(function() {
    var foo = new Object();
    var bar = new Object();
    var map = new Object();

    map[foo] = 'foo';
    map[bar] = 'bar';

    return map[foo];
})();

A.

"bar"

JSBin | JSBin explained

Q. What's the result?

function f() {
    return 'foo';
}
(function() {
    if (1 === 0) {
        function f() {
            return 'bar';
        }
    }
    return f();
})();

A.

"bar"

JSBin | JSBin explained

Q. What's the result?

(function() {
    return NaN === NaN;
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    function foo() {
        return 'a';
    }

    return foo();

    function foo() {
        return 'b';
    }
})();

A.

"b"

JSBin | JSBin explained

Q. What's the result?

(function(limit) {
  for (var i = 0; i < limit; i++) {
    setTimeout(function() {
      console.log(i);
    }, 0);
  }
})(3);

A.

3
3
3

JSBin | JSBin explained

Q. What's the result?

(function(a, b) {
  arguments[1] = 3;
  return b;
})(1, 2);

A.

3

JSBin | JSBin explained

Q. What's the result?

(function(a, b, c) {
  delete arguments[0];

  return arguments.length;
})(1, 2, 3);

A.

3

JSBin | JSBin explained

Q. What's the result?

(function() {
    return (function (a, b) {}).length;
})();

A.

2

JSBin | JSBin explained

Q. What's the result?

(function(a, b) {
   var foo, bar;

   foo = (bar = a, b);

   return foo;
})(1, 2);

A.

2

JSBin | JSBin explained

Q. What's the result?

(function(undefined) {
  var foo;
  return foo === undefined;
})(true);

A.

false

JSBin | JSBin

Q. What's the result?

(function(n) {
    return ~(n);
})(-3);

A.

2

JSBin | JSBin explained

Q. What's the result?

(function(n) {
    return ~~n;
})(-1.5);

A.

-1

JSBin | JSBin explained

Q. What's the result?

(function(x) {
    return !!x;
})('a');

A.

true

JSBin | JSBin explained

Q. What's the result?

(function() {
    return typeof null === 'null';
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    return +(new Date())
})();

A.

1393812837139

JSBin | JSBin explained

Q. What's the result?

(function() {
    return (new Date()).valueOf();
})();

A.

1393812845834

JSBin | JSBin explained

Q. What's the result?

(function() {
    return ''+(new Date());
})();

A.

"Sun Mar 02 2014 18:14:01 GMT-0800 (PST)"

JSBin | JSBin explained

Q. What's the result?

(function() {
    var foo = 'a';
    (function(foo) {
        foo = 'b';
    })(foo);
    return foo;
})();

A.

"a"

JSBin | JSBin explained

Q. What's the result?

(function() {
    return arguments.toString();
})();

A.

"[object Arguments]"

JSBin | JSBin explained

Q. What's the result?

(function() {
    return (function(){}) === (function(){});
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function(n) {
    return n === new Number(n);
})(10);

A.

false

JSBin | JSBin explained

Q. What's the result?

(function(x) {
    return new String(x) === x;
})('a');

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    return [1+1] === [2];
})()

A.

false

JSbin | JSBin explained

Q. What's the result?

(function() {
    return {foo: 'bar'} === {foo: 'bar'};
})();

A.

false

JSBin| JSBin explained

Q. What's the result?

(function() {
    for(;;);
    return 1;
})();

A.

*Infinite loop*

JSBin | JSBin explained

Q. What's the result?

(function() {
    return ['10','10','10','10'].map(parseInt);
})();

A.

[10, NaN, 2, 3]

JSBin | JSBin explained

Q. What's the result?

(function() {
    var o = {
        toString: function() {
            return 'a';
        },
        valueOf: function () {
            return 1;
        }
    };

    return o + o;
})();

A.

2

JSBin | JSBin explained

Q. What's the result?

(function() {

  var f = function g() {
    return 1;
  };

  return g();

})();

A.

ReferenceError: g is not defined

JSBin | JSBin explained

Q. What's the result?

(function() {
  return void (1+1);
})();

A.

undefined

JSBin | JSBin explained

Q. What's the result?

(function() {

  var a = [1,2];
  var b = a;

  a = [1,2];

  return a === b;

})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    var x = 1;

    return (function () {
        return x;

        var x = 2;
    })();
})();

A.

undefined

JSBin | JSBin explained

Q. What's the result?

(function(n) {
    var even = function (num) {
        return (num === 0) || !(even(num - 1))
    };

    var _even = even;

    even = void 0;

    return _even(n);
})(2);

A.

TypeError: undefined is not a function

JSBin | JSBin explained

Q. What's the result?

(function() {
    var n;

    function name() {
        return this.name
    };

    n = name.bind({name: 'foo'});
    n = n.bind({name: 'bar'})

    return n();
})();

A.

"foo"

JSBin | JSBin explained

Q. What's the result?

(function() {
    return ('3' > '12') === ('03' > '12');
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    return Math.pow(2,53) === (Math.pow(2,53) + 1);
}();

A.

true

JSBin | JSBin explained

Q. What's the result?

(function() {
    return Math.pow(2,1024) === Infinity;
})();

A.

true

JSBin | JSBin explained

Q. What's the result?

(function() {
    return (Infinity - 100) === Infinity;
}();

A.

true

JSBin | JSBin explained

Q. What's the result?

(function() {
    return (0.1 + 0.2 === 0.3);
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    return (0.1).toFixed(20);
})();

A.

"0.10000000000000000555"

JSBin | JSBin explained

Q. What's the result?

(function() {
    return parseFloat('3.3.4');
})();

A.

3.3

JSBin | JSBin explained

Q. What's the result?

(function() {
    return 010;
})();

A.

8

JSBin | JSBin explained

Q. What's the result?

(function() {
    return (parseInt('10000000000000000', 10) ===
            parseInt('10000000000000001', 10)
    );
})();

A.

true

JSBin | JSBin explained

Q. What's the result?

(function(n) {
    return (Function)('var n = n || 2; return n;')(n);
})(1);

A.

2

JSBin | JSBin explained

Q. What's the result? (assuming window scope)

var a = 1;
b = 1;

(function() {
  return (delete window.a) === (delete window.b);
})();

A.

false

JSBin | JSBin explained

(function(x) {
  var isMatch,
      regex = /[\w]/gi;

  return (regex.test(x) === regex.test(x));
})('a');

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    return ![];
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
    return +[];
})();

A.

0

JSBin | JSBin explained

Q. What's the result?

(function() {
    return [][[]];
})();

A.

undefined

JSBin | JSBin explained

Q. What's the result?

(function() {
    return +!+[];
})();

A.

1

JSBin | JSBin explained

Q. What's the result?

(function() {
    return []+[];
})();

A.

""

JSBin | JSBin explained

Q. What's the result?

(function() {
    return true + 1;
})();

A.

2

JSBin | JSBin explained

Q. What's the result?

(function() {
    return 1 / '';
})();

A.

Infinity

JSBin | JSBin explained

Q. What's the result?

(function() {
    return 1 * null;
})();

A.

0

JSBin | JSBin explained

Q. What's the result?

(function() {
    return new Array() == false;
})();

A.

true

JSBin | JSBin explained

Q. What's the result?

(function() {
  if ([]) {
    return [] == false;
  }
})();

A.

true

JSBin | JSBin explained

Q. What's the result?

(function() {
  return ''.concat(null);
})();

A.

"null"

JSBin | JSBin explained

Q. What's the result?

(function(a, b) {
  return a + + b;
})('a','b');

A.

"aNaN"

JSBin | JSBin explained

Q. What's the result?

(function() {
  Object.prototype.foo = 'foo';

  return foo;
})();

A.

"foo"

JSBin | JSBin explained

Q. What's the result?

(function() {
  return 1000 === 1e3;
})();

A.

true

JSBin | JSBin explained

Q. What's the result?

(function() {
  return 9999999999999999;
})();

A.

10000000000000000

JSBin | JSBin explained

Q. What's the result?

(function() {
  (function() {
    var a = b = 1;
  })();

  return typeof a === typeof b;
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
  return Array(3).map(function(o) { return 'a'; });
})();

A.

[undefined, undefined, undefined]

JSBin | JSBin explained

Q. What's the result?

(function() {
  var foo = [0,1,2];
  foo[10] = 10;
  return foo.filter(function(n) { return n === undefined; });
})();

A.

[]

JSBin | JSBin explained

Q. What's the result?

(function(x) {
  var ret = null;

  switch(x) {
    case 'A':
        ret = 'A';
        break;
    default:
        ret = 'unknown';
        break;
  }

  return ret;
})(new String('A'));

A.

"unknown"

JSBin | [JSBin explained](http://jsbin.com/leyaqamuru/1/edit?html,js,consol:w jke)

Q. What's the result?

(function() {
  var x = {};

  return x.prototype === Object.getPrototypeOf(x);
})();

A.

false

JSBin | JSBin explained

Q. What's the result?

(function() {
  function foo() {}
  foo.name = 'bar';

  return foo.name;
})();

A.

"foo"

JSBin | JSBin explained

Q. What's the result?

(function() {
  return Array(5).join(',').length;
})();

A.

4

JSBin | JSBin explained

Q. What's the result?

(function(x) {
  return x++ + ++x;
})(2);

A.

6

JSBin | JSBin explained

Q. What's the result?

(function() {
  'use strict';

  let type = typeof foo;
  let foo = 1;

  return type;
})();

A.

ReferenceError: foo is not defined

License

Released under the MIT License.