我想检查一个数字是否为负数。我正在寻找最简单的方法,因此预定义的 JavaScript 函数是最好的,但我还没有找到任何东西。这是我目前所拥有的,但我认为这不是一个好方法:
function negative(number) {
if (number.match(/^-\d+$/)) {
return true;
} else {
return false;
}
}
最佳答案
与其编写函数来执行此检查,不如使用以下表达式:
(number < 0)
Javascript 将首先尝试将左侧转换为数字值,然后再检查它是否小于零,从而评估此表达式,这似乎是您想要的。
规范和细节
x < y
的行为在§11.8.1 小于运算符 (<
) 中指定,它使用§11.8.5 抽象关系比较算法。
如果两者都x
,情况就大不相同了。和 y
是字符串,但由于右侧已经是 (number < 0)
中的数字,比较将尝试将左侧转换为要进行数值比较的数字。如果左边不能转换为数字,则结果为false
.
请注意,与基于正则表达式的方法相比,这可能会产生不同的结果,但根据您尝试执行的操作,它最终可能会做出正确的事情。
-
"-0" < 0
是false
,这与-0 < 0
的事实一致也是false
(参见:signed zero)。 -
"-Infinity" < 0
是true
(承认无穷大) -
"-1e0" < 0
是true
(接受科学记数法) -
"-0x1" < 0
是true
(接受十六进制文字) -
" -1 " < 0
是true
(允许使用某些形式的空格)
对于上述每个示例,正则表达式方法的计算结果都是相反的(true
而不是 false
,反之亦然)。
引用资料
- ECMAScript 5 (PDF)
- ECMAScript 3, §11.8.1 The Less-than Operator (
<
) - ECMAScript 3, §11.8.5 The Abstract Relational Comparison Algorithm
另见
附录 1:条件运算符 ?:
也应该说这种形式的陈述:
if (someCondition) {
return valueForTrue;
} else {
return valueForFalse;
}
可以重构为使用三元/条件 ?:
运算符 ( §11.12) 简单地:
return (someCondition) ? valueForTrue : valueForFalse;
?:
的惯用用法可以使代码更加简洁易读。
相关问题
附录2:类型转换函数
Javascript 具有您可以调用以执行各种类型转换的函数。
类似下面的内容:
if (someVariable) {
return true;
} else {
return false;
}
可以使用 ?:
进行重构运算符(operator):
return (someVariable ? true : false);
但是你也可以进一步简化为:
return Boolean(someVariable);
这调用了 Boolean
作为函数 (§15.16.1) 执行所需的类型转换。您可以类似地调用 Number
作为一个函数 ( §15.17.1 ) 执行数字转换。
相关问题
关于javascript - 如何检查一个数字是否为负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571717/