1     function w(w){console.log(w)}    
 2     w(null == null);
 3     w(null === null);
 4     w(NaN == NaN); //false
 5     w(NaN === NaN); //false
 6     w(NaN); //NaN
 7     w('2' == 2) //true
 8     w('2' === 2); //false
 9     w(null == undefined) //true
10     w(null === undefined) //false

 ECMA-262_ECMAScript®2015 Language Specification

 

6.1.6
The  Number  type  has  exactly 18437736874454810627(that  is, 264-253+3) values,
representing  the  double-precision  64-bit  format  IEEE  754-2008values  as  specified  in  the  IEEE  Standard  for  Binary  Floating-Point Arithmetic,  except  that  the 9007199254740990(that  is, 253-2)  distinct  “Not-a-Number”  values of  the  IEEE Standard are represented in ECMAScript as a single special NaN value. (Note that the NaN value is produced by the program expression NaN.)
In some implementations, external code might be able to detect a difference between various Not-a-Number values, but such behaviour is implementation-dependent; to ECMAScript code, all NaN values are indistinguishable from each other.