如何检测正面或负面变化?
示例:
1
更改为2
= false
0
更改为1
= false
因为两者都是正数
1
更改为-1
= true
0
更改为-1
= true
因为积极变为负面
-1
更改为0
= true
-1
更改为1
= true
因为负面改变为正面
我喜欢..
var a_test,b_test;
if(a<0) {
a_test = 'negative';
} else {
a_test = 'positive';
}
if(b<0) {
b_test = 'negative';
} else {
b_test = 'positive';
}
if(a_test!==b_test) {
alert('Yeah!');
}
进行测试: http://jsfiddle.net/e9QPP/
更好的编码可以做这样的事情吗?
Wiki:负数是一个小于零的实数
答案 0 :(得分:5)
可读性计数。
所以,我提出了更具可读性和代码审查的传递版本
if (a < 0 && b >= 0 || a >= 0 && b < 0) {
alert("Yeah");
}
答案 1 :(得分:4)
你似乎想要
if (a*b<0) alert('Yeah!');
如果您想将0
视为正数,可以使用
if (a*b<0 || (!(a*b) && a+b<0)) alert('Yeah!');
答案 2 :(得分:3)
function sign(x) {
return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;
}
然后你的问题可以用清晰的(希望)简单的术语来表达:
if (sign(a) !== sign(b)) {
// Your code here
}
答案 3 :(得分:1)
根据您的标准,您似乎只想比较两个数字的符号。符号存储在数字的最高位,因此,为了比较符号,我们可以简单地将所有其他位移出数字,并比较符号。
JavaScript中的数字是64位(double
),所以我们需要移开符号前面的63位:
if (a >>> 63 !== b >>> 63) alert('Yeah!');
这里提供jsPerf comparison based on the 4 methods。
请注意,这假设数字是64位。我不知道规范是否将它限制为64位,但是有些浏览器可能会出现(或将会是一天),数字可能由128位数或更大数字表示。
答案 4 :(得分:1)
也许有点晚了,但我遇到了同样的问题。
假设你现在a和b是数字,为什么不呢:
if(a < 0 ? b >=0 : b < 0){
// your code here
}