2012-01-14 179 views
-1

我有一個字符串,'0x000000000000090D',我傳遞給一個函數。但是,當我試圖在函數中的警報中顯示它時,它已被轉換爲2317.在調用函數中的警報中顯示它可正確顯示它。爲什麼JavaScript轉換它,它是什麼將它轉換爲?

var tagid = msg[post].TagID.toString(); 
alert(tagid); 
ShowDetails(tagid); 

function ShowDetails(tagid){ 
alert(tagid); 
} 

爲什麼它被轉換,它被轉換爲什麼,所以我可以嘗試阻止它?

謝謝!

+4

它通常是有幫助的,以提供一個工作測試用例。只是複製你的描述不會重複的問題:http://jsfiddle.net/aybba/ – Quentin 2012-01-14 17:55:14

+0

沒有看到代碼,我們不知道它爲什麼被轉換。以小數點,順便說一句。 – 2012-01-14 17:55:27

+0

0x000 [NUMBER]是整數(十六進制)的C語言符號。當你使用parseInt時,它將被轉換爲一個整數。 – Codebeat 2012-01-14 18:01:03

回答

1

請張貼您的確切代碼。在某處,它被視爲一個數字而不是一個字符串,並且您將看到十六進制數字(0x90D)的十進制表示形式(2317)。

如果您確實希望將其視爲字符串,並且它在源代碼中,請確保該值被引號包圍。

否則,如果這是一個變量(假設x),你可以在一定程度回到十六進制格式顯示你:

x.toString(16); 

然而,這並不會提供所有額外填充0,從而在(僅)90d。一些額外的解決方案,包括填充,可在How to convert decimal to hex in JavaScript?

+0

即使我將它作爲字符串傳遞,我仍然不明白爲什麼它將其轉換。使用x.toString(16)將其轉換回十六進制,我應該能夠提供填充。 – user1149389 2012-01-14 18:24:06

+0

@ user1149389 - 尚未發佈足夠的代碼來確定此變量/值的確切路徑。我們需要查看值被聲明爲0x90D的位置以進一步幫助。 – ziesemer 2012-01-14 18:30:02

+0

正在從數據庫讀入(varchar(50)是字段定義),並將其存入C#中的對象列表中。然後使用Linq過濾這些結果,並且使用jQuery使用Linq查詢的結果動態創建一個表。表格的第一列是我用來調用ShowDetails函數的超鏈接。除了被調用的函數外,它在任何地方都顯示爲0x000000000000090D。 – user1149389 2012-01-14 18:42:52

1

如果字符串實際上是一個字符串,則格式不應該改變。你必須將它轉換成某個地方的號碼。

看到這個小提琴。

http://jsfiddle.net/8SYNJ/

var x = '0x000000000000090D'; 
var div = document.querySelector('div'); 
function show(str) { 
    div.innerHTML = div.innerHTML + '<br/>' + typeof str + ' ' + str; 
} 

show(x); // string 
show(+x); // convert str to num aka decimal 
相關問題