假设我为变量分配了值10;
var values = 10;
我想运行一个特定的功能,如果该值是一个正数
if(values = +integer){
//do something with positive
} else {
//do something with negative values
}
如何实现?
假设我为变量分配了值10;
var values = 10;
我想运行一个特定的功能,如果该值是一个正数
if(values = +integer){
//do something with positive
} else {
//do something with negative values
}
如何实现?
Answers:
if (values > 0) {
// Do Something
}
true了评估values=true。所以...检查是否values实际上是布尔值!
仅检查一下,这似乎是最快的方法:
var sign = number > 0 ? 1 : number == 0 ? 0 : -1;
//Is "number": greater than zero? Yes? Return 1 to "sign".
//Otherwise, does "number" equal zero? Yes? Return 0 to "sign".
//Otherwise, return -1 to "sign".
它告诉您符号是否为正(返回1)或等于零(返回0),否则为(返回-1)。这是一个很好的解决方案,因为0不是正数,也不是负数,但这可能是您的var。
尝试失败:
var sign = number > 0 ? 1 : -1;
...将0当作一个负整数,这是错误的。
如果您试图设置条件,则可以进行相应的调整。这是if / else-if语句的两个类似示例:
范例1:
number = prompt("Pick a number?");
if (number > 0){
alert("Oh baby, your number is so big!");}
else if (number == 0){
alert("Hey, there's nothing there!");}
else{
alert("Wow, that thing's so small it might be negative!");}
范例2:
number = prompt("Pick a number?");
var sign = number > 0 ? 1 : number == 0 ? 0 : -1;
if (sign == 1){
alert("Oh baby, your number is so big!" + " " + number);}
else if (sign == 0){
alert("Hey, there's nothing there!" + " " + number);}
else if (sign == -1){
alert("Wow, that thing's so small it might be negative!" + " " + number);}
我是唯一读过此书并意识到答案没有解决问题的“整数”部分的人吗?
var myInteger = 6;
var myFloat = 6.2;
if( myInteger > 0 )
// Cool, we correctly identified this as a positive integer
if( myFloat > 0 )
// Oh, no! That's not an integer!
为了确保您正在处理整数,您需要将值转换为整数,然后将其与自身进行比较。
if( parseInt( myInteger ) == myInteger && myInteger > 0 )
// myInteger is an integer AND it's positive
if( parseInt( myFloat ) == myFloat && myFloat > 0 )
// myFloat is NOT an integer, so parseInt(myFloat) != myFloat
另外,在JavaScript中,有一些从float转换为整数的捷径。在JavaScript中,所有的位运算符(|,^,&等)将在操作之前投你的号码为整数。我认为这是因为99%的开发人员不知道IEEE浮点标准,并且当“ 200 | 2”评估为400(ish)时会感到非常困惑。这些快捷方式的运行速度通常比Math.floor或快parseInt,并且如果您尝试计算出尽可能小的代码,它们将占用更少的字节:
if( myInteger | 0 == myInteger && myInteger > 0 )
// Woot!
if( myFloat | 0 == myFloat && myFloat > 0 )
// Woot, again!
但是,等等,还有更多!
这些按位运算符正在处理32位有符号整数。这意味着最高位是符号位。通过将符号位强制为零,您的数字只有在为正数时才保持不变。您可以使用此功能一次检查正负和整数:
// Where 2147483647 = 01111111111111111111111111111111 in binary
if( (myInteger & 2147483647) == myInteger )
// myInteger is BOTH positive and an integer
if( (myFloat & 2147483647) == myFloat )
// Won't happen
* note bit AND operation is wrapped with parenthesis to make it work in chrome (console)
如果您在记住这个复杂的数字时遇到麻烦,也可以像下面这样预先计算:
var specialNumber = ~(1 << 31);
根据@Reinsbrain的评论,可以使用类似的按位破解来检查负整数。在负数中,我们确实希望最左边的位为1,因此通过将该位强制为1,仅当它以负数开头时,该数字将保持不变:
// Where -2147483648 = 10000000000000000000000000000000 in binary
if( (myInteger | -2147483648) == myInteger )
// myInteger is BOTH negative and an integer
if( (myFloat | -2147483648) == myFloat )
// Won't happen
这个特殊数字甚至更容易计算:
var specialNumber = 1 << 31;
如前所述,由于JavaScript按位运算符会转换为32位整数,因此不能容纳32位(大于20亿)的数字将失败
您可以使用以下较长的解决方案:
if( parseInt(123456789000) == 123456789000 && 123456789000 > 0 )
但是,即使这种解决方案在某些时候也失败了,因为parseInt它的精度对于大量数字是有限的。尝试以下操作,看看会发生什么:
parseInt(123123123123123123123); // That's 7 "123"s
在我的计算机上,在Chrome控制台中,此输出为:12312312312312313130000
这样做的原因是parseInt将输入视为64位IEEE浮点数。这仅提供了52个尾数位,这意味着在开始舍入之前最大值为〜4.5e15
99999999999 & 2147483647 = 1215752191
我以为您想采取积极的行动。
然后会建议:
if (Math.sign(number_to_test) === 1) {
function_to_run_when_positive();
}
在javascript中,像这样的简单比较:值> == 0由于存在-0和+0而不能为我们提供答案(这是其根源于导数方程的概念)以下是这些值及其属性的示例:
var negativeZero = -0;
var negativeZero = -1 / Number.POSITIVE_INFINITY;
var negativeZero = -Number.MIN_VALUE / Number.POSITIVE_INFINITY;
var positiveZero = 0;
var positiveZero = 1 / Number.POSITIVE_INFINITY;
var positiveZero = Number.MIN_VALUE / Number.POSITIVE_INFINITY;
-0 === +0 // true
1 / -0 // -Infinity
+0 / -0 // NaN
-0 * Number.POSITIVE_INFINITY // NaN
考虑到这一点,我们可以编写像波纹管这样的函数来检查给定数字的符号:
function isPositive (number) {
if ( number > 0 ) {
return true;
}
if (number < 0) {
return false;
}
if ( 1 / number === Number.POSITIVE_INFINITY ) {
return true;
}
return false;
}
要检查数字是否为整数,我们可以使用下面的函数:
function isInteger (number) {
return parseInt(number) === number;
}
//* in ECMA Script 6 use Number.isInteger
在这种情况下,我们正在检查数字没有任何指数部分(请注意,在JS中,数字以双精度浮点格式表示)。但是在javascript中,检查值是否为“安全整数”(http ://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)-简单来说,这意味着我们可以在“安全整数”中加上/减去1,并确保结果为与数学课程中预期的相同。为了说明我的意思,以下是一些不安全操作的结果:
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true
Number.MAX_SAFE_INTEGER * 2 + 1 === Number.MAX_SAFE_INTEGER * 2 + 4; // true
好的,因此要检查数字是否为安全整数,我们可以使用Number.MAX_SAFE_INTEGER / Number.MIN_SAFE_INTEGER和parseInt来确保该数字完全是整数。
function isSafeInteger (number) {
return parseInt(number) === number
&& number <== Number.MAX_SAFE_INTEGER
&& number >== Number.MIN_SAFE_INTEGER
}
//* in ECMA Script 6 use Number.isSafeInteger
要检查一个数字是正,负或负零。使用Math.sign()方法检查其符号 ,它将根据正负数和负零或零数字为您提供-1,-0、0和1
Math.sign(-3) // -1
Math.sign(3) // 1
Math.sign(-0) // -0
Math.sign(0) // 0
您可以使用移位位运算符,但它希望获得-0和+0一样的区别Math.sign(x):
let num = -45;
if(num >> 31 === -1)
alert('Negative number');
else
alert('Positive number');