Javascript负数

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

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

而不是写一个函数来做这个检查,你应该可以使用这个expression式:

 (number < 0) 

JavaScript会评估这个expression式,首先尝试将左侧转换为数字值,然后检查它是否小于零,这似乎是你想要的。


规格和细节

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

如果xy都是string,情况会有很大的不同,但是由于右侧已经是(number < 0)一个数字,因此比较将尝试将左侧转换为数字进行数字比较。 如果左侧不能转换为数字,结果是false

请注意,与基于正则expression式的方法相比,这可能会产生不同的结果,但根据您要做的是什么,最终可能会做正确的事情。

  • "-0" < 0false ,这与-0 < 0也是false (参见:有符号零 )的事实是一致的。
  • "-Infinity" < 0true (无限被确认)
  • "-1e0" < 0true (科学记数法被接受)
  • "-0x1" < 0true (接受hex文字)
  • " -1 " < 0true (允许某些forms的空格)

对于上面的每一个例子,正则expression式的方法都是相反的( true而不是false ,反之亦然)。

参考

  • ECMAScript 5(PDF)
  • ECMAScript 3,§11.8.1小于运算符( <
  • ECMAScript 3,§11.8.5抽象关系比较algorithm

也可以看看

  • regular-expressions.info/用正则expression式来匹配浮点数

附录1:条件运算符?:

还应该说这种forms的陈述:

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

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

 return (someCondition) ? valueForTrue : valueForFalse; 

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

相关问题

  • JavaScript如果替代
  • 三元或三元?

附录2:types转换function

JavaScript有函数,你可以调用执行各种types的转换。

像下面这样:

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

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

 return (someVariable ? true : false); 

但是你也可以进一步简化为:

 return Boolean(someVariable); 

这将调用Boolean作为函数(第15.16.1节 )来执行所需的types转换。 您可以类似地将Number作为函数(第15.17.1节 )来执行转换为数字。

相关问题

  • 我怎样才能在JavaScript中将string转换为布尔值?
  • javascript new Boolean()的目的是什么?
 function negative(n) { return n < 0; } 

您的正则expression式应该适用于string数字,但这可能更快。 (从上面类似的回答中的注释编辑,不需要用+n转换。)

那如此简单的事情呢?

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

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

这是一个古老的问题,但它有很多意见,所以我认为这是更新它很重要。

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

你可以使用它:

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

在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