Reputation: 29511
What does the +d
in
function addMonths(d, n, keepTime) {
if (+d) {
mean?
Upvotes: 497
Views: 202942
Reputation: 39480
The +
operator returns the numeric representation of the object. So in your particular case, it would appear to be predicating the if on whether or not d
is a non-zero number.
Reference here. And, as pointed out in comments, here.
Upvotes: 551
Reputation: 10572
Operator +
is a unary operator which converts the value to a number. Below is a table with corresponding results of using this operator for different values.
+----------------------------+-----------+
| Value | + (Value) |
+----------------------------+-----------+
| 1 | 1 |
| '-1' | -1 |
| '3.14' | 3.14 |
| '3' | 3 |
| '0xAA' | 170 |
| true | 1 |
| false | 0 |
| null | 0 |
| 'Infinity' | Infinity |
| 'infinity' | NaN |
| '10a' | NaN |
| undefined | NaN |
| ['Apple'] | NaN |
| function(val){ return val }| NaN |
+----------------------------+-----------+
Operator +
returns a value for objects which have implemented method valueOf
.
let something = {
valueOf: function () {
return 25;
}
};
console.log(+something);
Upvotes: 115
Reputation: 24666
As explained in other answers it converts the variable to a number. Specially useful when d
can be either a number or a string that evaluates to a number.
Example (using the addMonths
function in the question):
addMonths(34,1,true);
addMonths("34",1,true);
then the +d
will evaluate to a number in all cases. Thus avoiding the need to check for the type and take different code paths depending on whether d
is a number, a function or a string that can be converted to a number.
Upvotes: 21
Reputation: 33501
It is a unary "+" operator which yields a numeric expression. It would be the same as d*1
, I believe.
Upvotes: 36