Javascript WTF

A site where we can all share in those little WTF moments we enjoy with Javascript


04 May 2018

The Javascript Holy Trinity

Javascript Holy Trinity

JavaScript is as convoluted as Christian theology


04 May 2018

Arrays equal Strings?!

var a = [1,2,3];
var b = [1,2,3];
var c = '1,2,3';

a == c; // true
b == c; // true
a == b; // false

shuts laptop forever


03 November 2017

Appending a string to null treats it as a string

t = 'test'
undefined

t += 'ing'
"testing"

t=null
null

t += 'ing'
"nulling"

17 July 2017

Identical arrays are not equal?!

> ['a', 'b'] !== ['a', 'b']
true

> ['a', 'b'] != ['a', 'b']
true

> ['a', 'b'] == ['a', 'b']
false

Sure… Those are clearly not the same ;)


09 June 2017

WTF Strings?

> 'wtf' instanceof String
false

> typeof 'wtf'
'string'

> typeof String('wtf')
'string'

> String('wtf') === 'wtf'
true

09 June 2017

Undefined can be defined

> var t
< undefined

> t == undefined
< true      // Ok, that makes sense

> t = "Defined"
< "Defined" // Ok...
> var t
< undefined // ... so far, so good...
> t == undefined
< false     // ... What now?

09 June 2017

toString on numbers

You can cast floats to strings, but not integers.

> 3..toString()
"3"
> 3.toString()
Uncaught SyntaxError: Invalid or unexpected token

09 June 2017

Subtraction vs Addition vs Concatenation

String manipulation vs Maths

> '10' - 3
7

> '10' + 3
'103'
> '1' / '1'
1
> '1' * '1'
1
> '1' + '1'
'11'

09 June 2017

parseInt is strange!

parseInt(0.0000008, 10)
8

09 June 2017

Numbers get sorted alphabetically

> [10, 9, 8, 3, 2, 1, 0].sort()
[ 0, 1, 10, 2, 3, 8, 9 ]

09 June 2017

Null is and isn’t an object?

> typeof null // 'object'
> null instanceof Object // false

09 June 2017

Null Comparison

/* null comparation */

> 0 > null
false

> 0 >= null
true

> 0 == null
false

> 0 <= null
true

> 0 < null
false

> typeof null
'object'

> null instanceof Object
false

09 June 2017

NaN is a number

NaN is a number, but its’s not equal to itself!

> typeof NaN // 'Number'
> 123 === 123 // true
> NaN === NaN // false
> NaN == NaN // false

09 June 2017

Floating Point Maths

0.1 + 0.2 === 0.3 // false

(Clearly this is a normal floating point problem, but still!)


09 June 2017

Boolean Maths

/* boolean math */

> true + false
1

> true + true == true
false

09 June 2017

Array Coercion

[] == ![];     // true

Technically, empty array is falsey, just like a negated array. But thats not entirely obvious!


09 June 2017

Adding things up

> []+[] // ""
> []+{} // "[object Object]"
> {}+[] // 0
> {}+{} // NaN

Well those are some nice and consistent results!