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 。
如果x
和y
都是string,情况会有很大的不同,但是由于右侧已经是(number < 0)
一个数字,因此比较将尝试将左侧转换为数字进行数字比较。 如果左侧不能转换为数字,结果是false
。
请注意,与基于正则expression式的方法相比,这可能会产生不同的结果,但根据您要做的是什么,最终可能会做正确的事情。
-
"-0" < 0
是false
,这与-0 < 0
也是false
(参见:有符号零 )的事实是一致的。 -
"-Infinity" < 0
为true
(无限被确认) -
"-1e0" < 0
是true
(科学记数法被接受) -
"-0x1" < 0
是true
(接受hex文字) -
" -1 " < 0
是true
(允许某些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