[英]Javascript negative number
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 found yet anything, here is what I have so far but I don't think that this is a good way:我正在寻找最简单的方法,因此预定义的 javascript 函数将是最好的,但我还没有找到任何东西,这是我目前所拥有的,但我认为这不是一个好方法:
function negative(number) {
if (number.match(/^-\d+$/)) {
return true;
} else {
return false;
}
}
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. Javascript 将首先尝试将左侧转换为数字值,然后检查它是否小于零来评估此表达式,这似乎是您想要的。
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 . x < y
的行为在§11.8.1 小于运算符 ( <
) 中指定,它使用§11.8.5 抽象关系比较算法。
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.如果x
和y
都是字符串,情况就会大不相同,但由于右侧已经是(number < 0)
,因此比较将尝试将左侧转换为要进行数字比较的数字。 If the left hand side can not be converted to a number, the result is false
.如果左侧无法转换为数字,则结果为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 ). "-0" < 0
为false
,这与-0 < 0
也是false
的事实一致(请参阅: signed zero )。"-Infinity" < 0
is true
(infinity is acknowledged) "-Infinity" < 0
为true
(确认无穷大)"-1e0" < 0
is true
(scientific notation literals are accepted) "-1e0" < 0
为true
(接受科学记数法文字)"-0x1" < 0
is true
(hexadecimal literals are accepted) "-0x1" < 0
为true
(接受十六进制文字)" -1 " < 0
is true
(some forms of whitespaces are allowed) " -1 " < 0
为true
(某些形式的空格是允许的) For each of the above example, the regex method would evaluate to the contrary ( true
instead of false
and vice versa).对于上面的每个示例,正则表达式方法的计算结果都是相反的( true
而不是false
,反之亦然)。
<
) ECMAScript 3, §11.8.1 小于运算符 ( <
)?:
附录 1:条件运算符?:
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:可以重构为使用三元/条件?:
运算符(第11.12 节)来简单地:
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. Javascript 具有您可以调用以执行各种类型转换的函数。
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.这将调用Boolean
作为函数(第15.16.1 节)来执行所需的类型转换。 You can similarly call Number
as a function ( §15.17.1 ) to perform a conversion to number.您可以类似地将Number
作为函数调用(第15.17.1 节)来执行到数字的转换。
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.) (根据上述类似答案中的评论进行编辑,不需要使用+n
转换。)
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. ECMAScript 6 引入了函数Math.sign()
,它返回一个数字的符号(如果它是正数则为 1,如果它是负数则为 -1)或 NaN 如果它不是数字。 Reference 参考
You could use it as:您可以将其用作:
var number = 1;
if(Math.sign(number) === 1){
alert("I'm positive");
}else if(Math.sign(number) === -1){
alert("I'm negative");
}else{
alert("I'm not a number");
}
How about something as simple as:像这样简单的事情怎么样:
function negative(number){
return number < 0;
}
The * 1
part is to convert strings to numbers.* 1
部分是将字符串转换为数字。
In ES6 you can use Math.sign function to determine if,在 ES6 中,您可以使用 Math.sign 函数来确定,
1. its +ve no
2. its -ve no
3. its zero (0)
4. its NaN
console.log(Math.sign(1)) // prints 1
console.log(Math.sign(-1)) // prints -1
console.log(Math.sign(0)) // prints 0
console.log(Math.sign("abcd")) // prints NaN
If you really want to dive into it and even need to distinguish between -0
and 0
, here's a way to do it.如果你真的想深入研究它,甚至需要区分-0
和0
,这里有一种方法可以做到。
function negative(number) {
return !Object.is(Math.abs(number), +number);
}
console.log(negative(-1)); // true
console.log(negative(1)); // false
console.log(negative(0)); // false
console.log(negative(-0)); // true
An nice way that also checks for positive and negative also...一个很好的方法也可以检查正面和负面...
function ispositive(n){
return 1/(n*0)===1/0
}
console.log( ispositive(10) ) //true
console.log( ispositive(-10) ) //false
console.log( ispositive(0) ) //true
console.log( ispositive(-0) ) //false
essentially compares Infinity
with -Infinity
because 0===-0// true
本质上是将Infinity
与-Infinity
进行比较,因为0===-0// true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.