JavaScript funkiness
JavaScript is an awesome language! It is multi-paradigm and absolutely ubiquitous (available on almost every computer through the browser). As I explore JavaScript further, I find more and more oddities. While I’m thinking about it, I thought I’d write a few out. These gems are a combination of my experience and threads on StackOverflow.
var whatDate = new Date(2012, 25, 1); console.log(whatDate.getFullYear()); 2014
var now = new Date(); console.log(now.getFullYear()); console.log(now.getYear()); console.log(now.getDate()); 2012 112 12
5 + 3 8 5 - -3 8 5 - 3 2 "5" - 3 2 "5" + 3 "53"
var test = function() { return { id: 1, title: "seth" }; } test(); SyntaxError: Unexpected token : var test = function() { return { id: 1, title: "seth" }; } test(); Object
'' == '0' // false 0 == '' // true 0 == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true " \t\r\n" == 0 // true
console.log(parseInt("05")) 5 console.log(parseInt("08")) 0 console.log(parseInt("010")) 8
3.toString(); SyntaxError: Unexpected token ILLEGAL 3..toString(); "3"
2 == [[[2]]] true
parseInt("hello") NaN 1/0 Infinity undefined = 42; Infinity = "beyond" NaN = 1; console.log(42 == undefined) console.log("NaN (not a number) = " + NaN); true NaN (not a number) = 1
myHash = {"my" : "hash"} console.log(myHash.my); console.log(myHash["my"]); hash hash
var i = 0 a = new Array(); a[i++] = i 1
var dog = "rufus" !!dog true
var a = 1; var func = function() { a = 2; if ( false ) { a = 3; } } console.log("before func() a = " + a); func(); console.log("after func() a = " + a); before func() a = 1 after func() a = 2 var func = function() { var a = 1; } a = 2; console.log("before func() a = " + a); func(); console.log("after func() a = " + a); before func() a = 2 after func() a = 2
if ( "Seth" ) { console.log("true"); } if ( 2+2 ) { console.log("true"); } if ( {} ) { console.log("true"); } true true true
https://stackoverflow.com/questions/1995113/strangest-language-feature https://stackoverflow.com/questions/1724255/why-does-2-2-in-javascript
Have you encountered other gotchas or been bitten by anything else in JavaScript?