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 ``{plus}`` and ``++-++`` can be used with objects corresponding to primitive types, and ``{plus}`` can be used with ``++Date++``.

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


ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
