An interesting thing I've never seen before was posted in another question. They had something like:
var i = + +1;
var i = 5;
var j = + +i;
document.body.innerHTML = i === j ? 'Same' : 'Different';
+ + 1
1 == - -1
-1 == + -1
Putting your the statement through the AST Explorer, we can see that what we get here is two nested Unary Expressions, with the unary + operator.
It's a unary expression consisting of
+i is itself a unary expression consisting of
The unary expression with the unary + operator, will convert the expression portion into a number. So you're essentially converting
i to a number, then converting the result of that to a number, again (which is a no-op).
For the sake of completion, it works on as many levels as you add:
var i = 5; console.log(+ + + + + +i); // 5 console.log(i); // still 5