Javascript负数

Ada*_*dam 59 javascript negative-number

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

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

pol*_*nts 288

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

(number < 0)
Run Code Online (Sandbox Code Playgroud)

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


规格和细节

行为for x < y§11.8.1TheLess-than Operator(<)中指定,它使用§11.8.5抽象关系比较算法.

这种情况是有很多不同的如果两个xy都是字符串,但由于右手边是已经在若干(number < 0),比较会尝试左侧转换为数字来进行数值比较.如果左侧无法转换为数字,则结果为false.

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

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

对于上述每个示例,正则表达式方法将进行相反的评估(true而不是false反之亦然).

参考

也可以看看


附录1:条件运算符 ?:

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

if (someCondition) {
   return valueForTrue;
} else {
   return valueForFalse;
}
Run Code Online (Sandbox Code Playgroud)

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

return (someCondition) ? valueForTrue : valueForFalse;
Run Code Online (Sandbox Code Playgroud)

习惯用法?:可以使代码更简洁和可读.

相关问题


附录2:类型转换功能

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

类似于以下内容:

if (someVariable) {
   return true;
} else {
   return false;
}
Run Code Online (Sandbox Code Playgroud)

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

return (someVariable ? true : false);
Run Code Online (Sandbox Code Playgroud)

但您也可以进一步简化为:

return Boolean(someVariable);
Run Code Online (Sandbox Code Playgroud)

Boolean称为函数(第15.16.1节)来执行所需的类型转换.您可以类似地调用Number函数(第15.17.1节)来执行转换为数字.

相关问题

  • 是的,这会奏效。我仍然更喜欢 `!!` 因为使用 `Boolean` 涉及额外的函数调用,因此速度较慢,而且字符也更多。 (2认同)

bch*_*rry 12

function negative(n) {
  return n < 0;
}
Run Code Online (Sandbox Code Playgroud)

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


Ivá*_*res 5

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

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");
}
Run Code Online (Sandbox Code Playgroud)