2013-10-10 70 views
2

我已經看到了使用加號運算符將字符串轉換爲數字的代碼。如何使用+作爲投射機制?

這看起來是這樣的:

var x ="5",y; 
y = +x; 
console.log(typeof y) //number 

這是如何工作的?

+0

@Sebas JavaScript引擎不會猜測你想要什麼,它只是應用運算符。它不會像'-4'那樣編寫一個字面,它只是動態地將運算符應用於後面的內容。 –

+0

@dystroy,我明白了。在我看來,隱含地做出轉換已經在猜測,這就是你,編碼人員想要的。其他強類型語言會崩潰。這就像是說影響一個字符串值到一個變量,JavaScript猜測類型。這是正確的,因爲這是引擎必須知道的唯一方式。 – Sebas

回答

3

實際上,有兩個+運算符:二進制+運算符和這一個:一元運算符

看看它是如何描述in the MDN

  • (一元加號)

的一元加運算先於其操作數評估其 操作數,而是試圖將其轉換成數,如果它不是 已經。例如,y = + x取x的值,並將其賦值給 y;也就是說,如果x是3,y會得到值3,x會保留 的值3;但如果x是字符串「3」,y也會得到值 3.儘管一元否定( - )也可以轉換非數字,但一元加數是將某物轉換成 數字的最快和首選方式,因爲它不會對 號碼執行任何其他操作。它可以轉換整數和浮點數的字符串表示形式, 以及非字符串值true,false和null。 中的整數支持十進制和十六進制(「0x」 - 前綴)格式。 支持負數(儘管不適用於十六進制)。如果 解析不了某個值,則它將評估爲NaN。

+0

這適用於所有瀏覽器嗎?只是好奇 – Conqueror

0
var x = "5", 
    y; 

你宣佈分別命名爲xy兩個變量。前者設置爲保存字符串"5",後者保存undefined值(因爲它已聲明但未定義)。 然後您將y設置爲Number類型的字符串"5"(通過一元運算符+),即5的轉換。所以你得到typeof ynumber

+運營商是unary operator。它會評估一個試圖將其轉換爲數字的對象。