2016-10-04 110 views
0

我一直在嘗試做以下事情 - 將正數改爲負數。Javascript:將正數改爲負數?

看來有很多方法可以做到這一點。有標準的

x *= -1 

或者只是在變量的前面放一個負號,即如果x = 5,則-x等於-5。

這似乎是一個很好的速記,但想知道它的區別是什麼,在MDN上找不到關於這種簡寫的任何文檔。

我假設還有其他方法。

可能是一個基本的問題,但它是討厭不理解這種明顯的速記。

任何想法?

+1

這對你很有幫助http://stackoverflow.com/questions/5574144/positive-number-to-negative-number-in-javascript –

+0

「簡寫」[一元'-'運算符](https:/ /developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_negation_(-))必須工作,否則如何將'1'更改爲'-1'以便使用'* = -1'選項? (注意,'-'和'*'試圖將它們的操作數轉換爲數字,因此'x * =「-1」'起作用,就像'x =「12」一樣; x = -x;' ) – nnnnnn

+0

在@martin下面添加了一些更多細節 – nikjohn

回答

3

JavaScript中的一元運算符基本上是速記功能。你可以找到Unary (-)here的文檔

-需要一個參數。您傳遞給它的號碼。在引擎蓋下,我猜它將它乘以-1並返回產品。功能可以寫成:

function -(arg) { 
    return arg * -1; 
} 

這是猜想,但。需要通過V8的代碼庫來確定。

更新:

因此,從進一步的研究我的身影,這是不是乘以-1,它可能是一個簡單的符號改變。我提到了V8的實現,但是這被證明是一個死衚衕,因爲我吮吸C++,但是在檢查ECMA's specs和Steve Hollasch的精彩博客中定義的IEEE 754 specs時,我傾向於反轉符號位。所有的JavaScript數字是64位IEEE 754個浮點,它們可以表示像這樣:

SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM 

哪裏S爲符號位。所以它看起來像Unary -只是翻轉標誌位。