Reputation: 10083
null + 1 = 1
undefined + 1 = NaN
I am not able to understand what is the logic behind this. Shouldn't both have returned same result?
Upvotes: 8
Views: 6372
Reputation: 433
undefined means a variable has not been declared, or has been declared but has not yet been assigned a value, null is an assignment value that means “no value” http://www.jstips.co/en/javascript/differences-between-undefined-and-null/
The naturality of js of casting variables types is applied in null + 1
(because null is typeof object), meanwhile it cannot be applied in a "no value" (undefined).
When JavaScript tries to operate on a "wrong" data type, it will try to convert the value to a "right" type. https://www.w3schools.com/js/js_type_conversion.asp
More details: https://codeburst.io/javascript-null-vs-undefined-20f955215a2
Upvotes: 1
Reputation: 510
Because undefined
means its value is not defined yet so it will take NaN
and when you add 1 to it NaN + 1
which is resulting that value is still not defined NaN
And on the other hand null + 1
- object have null
value and your are trying to add 1 so that it will return 1 which assigned to object
You can also refer this for basic difference - What is the difference between null and undefined in JavaScript?
Upvotes: 2
Reputation: 276306
Basically, because that's what the language spec says - looking at ToNumber
:
Type Result
Null +0
Undefined NaN
And NaN
+ anything is NaN
This might make some sense from the language perspective: null
means an explicit empty value whereas undefined implies an unknown value. In some way - zero is the "number empty value" since it is neutral to addition. That said - that's quite a stretch and I think this is generally bad design. In real JavaScript code - you almost never add null
to things.
Upvotes: 10