`undefined `: est une valeur de type `Undefined` (var déclarée mais non assignée) <br>
`null `: est une valeur de type `Object `(ce qui est d'ailleurs un [bug de javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null)) (valeur déclarée et assignée à null )
```
var TestVar;
alert(TestVar); //shows undefined
alert(typeof TestVar); //shows undefined
```
```
var TestVar = null;
alert(TestVar); //shows null
alert(typeof TestVar); //shows object
```
Les deux signifient que la variable n'a pas de valeur assignée. La différence c'est que `undefined ` est un `type `utilisé par le compilateur JS pour dire que la variable n'a jamais été assignée et `null ` est plus une `valeur `donné par le développeur pour signifier que la variable n'a pas encore de valeur.
Une variable n'aura jamais de valeur null si elle n'a pas été assignée explicitement par le développeur.
[Pour plus d'informations](http://stackoverflow.com/questions/2235622/can-i-set-variables-to-undefined-or-pass-undefined-as-an-argument)
### Tester qu'une variable n'est ni `undefined`, ni `null ` :golfer:
La manière la plus sûr de faire ce test est :
```
if (typeof(value) !== "undefined" && value !==null){
}
```
Pour tester si la variable n'a pas l'un de ces types ou valeurs : null, NaN, empty string (""), 0, false :
```
if ( value){ //truthy values
}
```
Pour un test complet :
```
if (typeof(value) !== "undefined" && value){
}
```
>> Attention
1. Attention les tests d'égalité ou d’inégalité doivent être strictes (=== et !==) => comparaison de valeur et de type
2. typeof(value) !== "undefined" est mieux que value !==undefined dans le cas où undefined est utilisée dans le programme comme variable