如何判断一个数是否为负数?
我想检查一个数字是否为负数。我正在寻找最简单的方法,因此预定义的 JavaScript 函数将是最好的,但我还没有找到任何东西。这是我到目前为止所拥有的,但我认为这不是一个好方法:
function negative(number) {
if (number.match(/^-\d+$/)) {
return true;
} else {
return false;
}
}
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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您应该能够使用此表达式,而不是编写函数来执行此检查:
Javascript 将通过首先尝试将左侧转换为数字值来评估此表达式,然后再检查它是否小于零,这似乎是你想要什么。
规格和详细信息
x
x
的行为y
在§11.8.1 小于运算符 (<
) 中指定,它使用§11.8.5 抽象关系比较算法。如果
x
和y
都是字符串,情况就会有很大不同,但由于右侧已经是(number < 0),比较将尝试将左侧转换为要进行数字比较的数字。如果左侧无法转换为数字,则结果为
false
。请注意,与基于正则表达式的方法相比,这可能会产生不同的结果,但根据您想要做什么,它最终可能会做正确的事情。
false
,这与-0
一致。 0
也是false
(请参阅:签名零)。
true
(确认无穷大)"-1e0"
"-1e0"
"-1e0"
"-1e0"
"-1e0"
0
是true
(接受科学记数法文字)"-0x1"
"-0x1"
"-0x1"
"-0x1"
0
是true
(接受十六进制文字)" -1 "
" -1 "
" -1 "
" -1 "
" -1 "
0
是true
(允许某些形式的空格)对于上面的每个示例,正则表达式方法将得出相反的结果(
true
而不是false
,反之亦然)。参考文献
<
)另请参阅
附录 1:条件运算符
?:
还应该说,这种形式的语句:
可以重构为使用三元/条件
?:
运算符 (§11.12) 简单地说:惯用的
?:
用法可以使代码更加简洁易读。相关问题
附录 2:类型转换函数
Javascript 具有可调用来执行各种类型转换的函数。
如下所示:
可以使用
?:
运算符重构为:但您也可以进一步简化为:
这将
Boolean
调用为函数 (§15.16.1) 执行所需的类型转换。您可以类似地将Number
作为函数调用 (§15.17 .1) 执行数字转换。相关问题
Instead of writing a function to do this check, you should just be able to use this expression:
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.
Specifications and details
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
andy
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 isfalse
.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
isfalse
, which is consistent with the fact that-0 < 0
is alsofalse
(see: signed zero).
"-Infinity" < 0
istrue
(infinity is acknowledged)"-1e0" < 0
istrue
(scientific notation literals are accepted)"-0x1" < 0
istrue
(hexadecimal literals are accepted)" -1 " < 0
istrue
(some forms of whitespaces are allowed)For each of the above example, the regex method would evaluate to the contrary (
true
instead offalse
and vice versa).References
<
)See also
Appendix 1: Conditional operator
?:
It should also be said that statements of this form:
can be refactored to use the ternary/conditional
?:
operator (§11.12) to simply:Idiomatic usage of
?:
can make the code more concise and readable.Related questions
Appendix 2: Type conversion functions
Javascript has functions that you can call to perform various type conversions.
Something like the following:
Can be refactored using the
?:
operator to:But you can also further simplify this to:
This calls
Boolean
as a function (§15.16.1) to perform the desired type conversion. You can similarly callNumber
as a function (§15.17.1) to perform a conversion to number.Related questions
这是一个老问题,但有很多观点,所以我认为更新它很重要。
ECMAScript 6 引入了函数
Math.sign()
,它返回数字的符号(如果是正数则返回 1,如果是负数则返回 -1),如果不是数字则返回 NaN。 参考您可以将其用作:
This is an old question but it has a lot of views so I think that is important to update it.
ECMAScript 6 brought the function
Math.sign()
, which returns the sign of a number (1 if it's positive, -1 if it's negative) or NaN if it is not a number. ReferenceYou could use it as:
您的正则表达式对于字符串数字应该可以正常工作,但这可能更快。 (根据上面类似答案中的评论进行编辑,不需要使用
+n
进行转换。)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.)像这样简单的事情怎么样:
* 1
部分是将字符串转换为数字。How about something as simple as:
The* 1
part is to convert strings to numbers.如果您确实想深入研究它,甚至需要区分
-0
和0
,这里有一种方法。If you really want to dive into it and even need to distinguish between
-0
and0
, here's a way to do it.在 ES6 中,您可以使用 Math.sign 函数来确定是否,
In ES6 you can use Math.sign function to determine if,
一种还检查正负的好方法...
本质上是将 Infinity 与 -Infinity 进行比较,因为
0===-0// true
An nice way that also checks for positive and negative also...
essentially compares
Infinity
with-Infinity
because0===-0// true