The unary operators + and - can be used to convert some value types to numeric values. But not every value can be converted to a Number type; use it with an object, and result will be NaN (Not A Number). This can be confusing to maintainers.

Noncompliant Code Example

var obj = {x : 1};
doSomethingWithNumber(+obj);    // Noncompliant

function foo(){
  return 1;
}
doSomethingWithNumber(-foo);    // Noncompliant

Compliant Solution

var obj = {x : 1};
doSomethingWithNumber(+obj.x);

function foo(){
  return 1;
}
doSomethingWithNumber(-foo());

var str = '42';
doSomethingWithNumber(+str);

Exceptions

Unary + and - can be used with objects corresponding to primitive types, and + can be used with Date.

var b = new Boolean(true);
doSomethingWithNumber(-b);  // Compliant
var timestamp = +new Date();  // Compliant