2010-09-19 22 views
1

如何使用javascript將-1轉換爲1?如何使用javascript將-1轉換爲1?

var count = -1; //or any other number -2 -3 -4 -5 ... 

var count = 1; //or any other number 2 3 4 5 ... 

結果應該是

var count = 1; //or any other number 2 3 4 5 ... 
+2

這裏是一個與這個更關注下面的哪個答案更快的問題:http://stackoverflow.com/questions/441893/in-javascript-which-is-faster-math-absvalue-or -value-1 – lock 2010-09-19 23:04:03

回答

16
count = Math.abs(count) 
// will give you the positive value of any negative number 
3

ABS功能接通的所有數字陽性:即Math.abs(-1)= 1

3

替代方法(可能會更快,然後Math.abs,未經測試):

count = -5; 
alert((count^(count >> 31)) - (count >> 31)); 

請注意,javascript中的按位操作始終爲32位。

+0

[測試](http://jsfiddle.net/ZS5KC/) – 2010-09-19 23:00:21

+1

在FF3.6中,您的代碼比Math.abs(FF3.6中最快的方法)慢6%,並且與' v <0? -v:v'(在其他測試過的瀏覽器中速度最快),Opera 3.6中的代碼速度降低1%,Chrome 6.0中速度降低12%,IE8降低20%。 – some 2010-10-19 17:28:36

+0

在上面的評論中,我的意思是Opera 10.63。 – some 2010-10-19 17:39:38

0

如果感興趣的數量爲input ...除了Math.abs(input) ....

var count = (input < 0 ? -input : input); 

jsFiddle example

編輯:正如一些人士指出-input比快-1 * input

The以上使用了Javascript conditional operator。這是唯一的三元操作符(帶三個操作數)。

的語法是:

condition ? expr1 : expr2 

如果condition是真實的,expr1進行評估,如果它的費爾斯expr2進行評估。

+0

如果不使用Math.abs(最簡潔的方式來顯示你想要做什麼,也是最快的FF3.6),試試'v <0? v * -1:v',它比* -1快。 – some 2010-10-19 17:31:38

+0

@some - 我有什麼......輸入<0?輸入* -1:輸入'不同於------------------------'v <​​0? v * -1:v'? – 2010-10-19 17:34:16

+0

對不起,應該是'v <0? -v:v'。這是Opera 10.63,Chrome 6.3和IE8中速度最快的一款。 'Math.abs(v)'是Firefox 3.6中最快的。 – some 2010-10-19 17:39:03