Javascript负数

时间:2010-08-26 02:48:13

标签: javascript negative-number

我想检查数字是否为负数。我正在寻找最简单的方法,所以预定义的javascript函数将是最好的,但我还没有发现任何东西,这是我到目前为止但我不认为这是一个好方法:

  function negative(number) { 
        if (number.match(/^-\d+$/)) {
            return true;
        } else {
            return false;
        }
   }

7 个答案:

答案 0 :(得分:271)

您应该只使用此表达式而不是编写函数来执行此检查:

(number < 0)

Javascript将首先尝试将左侧转换为数字值,然后再检查它是否小于零,这似乎是您想要的。


规格和细节

x < y的行为在§11.8.1小于运算符(<中指定,它使用§11.8.5抽象关系比较算法

如果xy都是字符串,则情况会有很大差异,但由于右侧已经是(number < 0)中的数字,因此比较将尝试转换左侧手边用数字进行数字比较。如果左侧无法转换为数字,则结果为false

请注意,与基于正则表达式的方法相比,这可能会产生不同的结果,但取决于您尝试做什么,最终可能会做正确的事情。

  • "-0" < 0false,这与-0 < 0也是false的事实一致 (见:signed zero)。
  • "-Infinity" < 0true(无限被承认)
  • "-1e0" < 0true(接受科学记法文字)
  • "-0x1" < 0true(接受十六进制文字)
  • " -1 " < 0true(允许某些形式的空格)

对于上面的每个示例,正则表达式方法都会相反地评估(true而不是false,反之亦然。)

参考

另见


附录1:条件运算符?:

还应该说这种形式的陈述:

if (someCondition) {
   return valueForTrue;
} else {
   return valueForFalse;
}

可以重构为使用三元/条件?:运算符(§11.12)来简单地:

return (someCondition) ? valueForTrue : valueForFalse;

?:的惯用法可以使代码更简洁,更易读。

相关问题


附录2:类型转换功能

Javascript具有可以调用以执行各种类型转换的函数。

如下所示:

if (someVariable) {
   return true;
} else {
   return false;
}

可以使用?:运算符重构为:

return (someVariable ? true : false);

但您还可以进一步将其简化为:

return Boolean(someVariable);

这会将Boolean调用为函数(§15.16.1)来执行所需的类型转换。您也可以类似地将Number称为函数(§15.17.1)以执行转换为数字。

相关问题

答案 1 :(得分:12)

function negative(n) {
  return n < 0;
}

你的正则表达式应该可以正常使用字符串数字,但这可能更快。 (根据上述类似答案的评论编辑,不需要使用+n进行转换。)

答案 2 :(得分:3)

如此简单的事情:

function negative(number){
    return number < 0;
}

* 1部分是将字符串转换为数字。

答案 3 :(得分:3)

这是一个老问题,但它有很多观点,所以我认为更新它很重要。

ECMAScript 6带来了函数Math.sign(),它返回一个数字的符号(如果它是正数则为1,如果它为负则为-1)或者如果它不是数字则为NaN。 Reference

您可以将其用作:

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");
}

答案 4 :(得分:0)

在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

答案 5 :(得分:0)

如果您真的想深入研究它,甚至需要区分-00,这是一种实现方法。

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

答案 6 :(得分:0)

一种很好的方法,也可以检查正面和负面...

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

基本上将 Infinity-Infinity 进行比较,因为 0===-0// true