== checks if the values of the compared objects are equal
=== checks if the values and types of the objects are equal
var fiveAsText = '5'; var fiveAsNumber = 5; fiveAsText == fiveAsNumber // outputs true fiveAsText === fiveAsNumber // outputs false
This can lead to some unusual behaviour when dealing with different types. For instance, when you perform mathematical operations on a string type with a numeric value
var five = '5'; var three = 3; five + three // "53", string concatenation interprets the '5' as a string and overrides the addition operator five - three // 2, subtraction interprets the '5' as a number
Update (28th August 2015)
A perfect example of the confusion that this can cause is as below
The explanation isn''t exactly intuitive but at least shows that there is some sort of logic behind it all
+is overloaded as both the addition and string concatenation operator.
In mixed operations:
+casts numbers to strings.
-casts strings to numbers.
Both are used to denote signage. Leading either on a string will cast it to a number, with that sign.
Pretty simple stuff, right?
Number('5') - 3 '5' + (3).toString() '5' + (5).toString() 'foo' + Number('bar').toString() '5' + (-Number('2')).toString() // Long ass sign flipping, same as above Number(('5' + (3).toString())) - 3 (Number('5') - 3) + 3