I want to check if a number is negative. I’m searching for the easiest way, so a predefined JavaScript function would be the best, but I didn’t find anything yet. Here is what I have so far, but I don’t think that this is a good way:
function negative(number) { if (number.match(/^-\d+$/)) { return true; } else { return false; } }
Numbers that are less than zero are known as 'negative' numbers. These have a minus sign (−) in front of them to indicate that they are less than zero (for example, -10 or 'minus 10').
The Math. sign() is a built-in function in JavaScript and is used to know the sign of a number, indicating whether the number specified is negative or positive.
The value is negative if the MSB is set. The SF (sign flag) in FLAGS is set according to that bit of the result.
Instead of writing a function to do this check, you should just be able to use this expression:
(number < 0)
Javascript will evaluate this expression by first trying to convert the left hand side to a number value before checking if it's less than zero, which seems to be what you wanted.
The behavior for x < y
is specified in §11.8.1 The Less-than Operator (<
), which uses §11.8.5 The Abstract Relational Comparison Algorithm.
The situation is a lot different if both x
and y
are strings, but since the right hand side is already a number in (number < 0)
, the comparison will attempt to convert the left hand side to a number to be compared numerically. If the left hand side can not be converted to a number, the result is false
.
Do note that this may give different results when compared to your regex-based approach, but depending on what is it that you're trying to do, it may end up doing the right thing anyway.
"-0" < 0
is false
, which is consistent with the fact that -0 < 0
is also false
(see: signed zero)."-Infinity" < 0
is true
(infinity is acknowledged)"-1e0" < 0
is true
(scientific notation literals are accepted)"-0x1" < 0
is true
(hexadecimal literals are accepted)" -1 " < 0
is true
(some forms of whitespaces are allowed)For each of the above example, the regex method would evaluate to the contrary (true
instead of false
and vice versa).
<
)?:
It should also be said that statements of this form:
if (someCondition) { return valueForTrue; } else { return valueForFalse; }
can be refactored to use the ternary/conditional ?:
operator (§11.12) to simply:
return (someCondition) ? valueForTrue : valueForFalse;
Idiomatic usage of ?:
can make the code more concise and readable.
Javascript has functions that you can call to perform various type conversions.
Something like the following:
if (someVariable) { return true; } else { return false; }
Can be refactored using the ?:
operator to:
return (someVariable ? true : false);
But you can also further simplify this to:
return Boolean(someVariable);
This calls Boolean
as a function (§15.16.1) to perform the desired type conversion. You can similarly call Number
as a function (§15.17.1) to perform a conversion to number.
function negative(n) { return n < 0; }
Your regex should work fine for string numbers, but this is probably faster. (edited from comment in similar answer above, conversion with +n
is not needed.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With