2009-02-27 29 views
9

首先 - 我的描述;)parseInt替代

我有一個來自服務器的XmlHttpRequests JSON響應。 MySQL驅動程序輸出所有數據爲字符串,PHP返回它原樣,所以任何整數返回爲字符串,因此:

JS中的parseInt()函數是否有任何快速替代(hack),它可以解析純數字字符串,例如

var foo = {"bar": "123"}; 
... 
foo.bar = parseInt(foo.bar); // (int) 123 
+1

int = string * 1呢? – dusoft 2009-02-27 13:34:49

+0

不錯,也適用於漂浮物。 – KooiInc 2009-02-27 14:29:27

+0

無需繁殖。使用一元運算符:int = + string; (但是JavaScript中的每個數字仍然是一個浮點數(但我認爲我聽說V8可能有一些優化並實際使用整數) – some 2009-02-27 16:35:00

回答

35

要轉換爲整數只需使用一元+運算符,它應該是最快的方法:

var int = +string; 

轉換成其它類型可以以類似的方式來完成:

var string = otherType + ""; 
var bool = !!anything; 

More info

8

首先,你有沒有記錄,它是緩慢的,並造成問題?否則,我不打算尋找解決方案,因爲確實沒有問題。

其次,我猜想,因爲parseInt是一個原生的JS方法,它將以非常快的方式實現,並且可能以VM的本地語言(可能是C,取決於瀏覽器/ VM )。我認爲你可能會遇到一些麻煩,使得使用純JS的更快的方法。 =)

當然,我不是一個JS大師,所以我不確定,但這是我的直覺告訴我的,而且往往是「我怎麼會更快libraryFunction()的替代方法?「的問題。

+1

有沒有其他原因不使用parseInt - 比較parseInt(「07」)parseInt(「08」) – 2009-02-27 14:14:41

+2

那是你應該使用parseInt(「07」,10) – 2011-04-20 13:25:42

2

數量的構造也存在,但它應該是一樣parseInt函數速度的長期(前面已經說了,你應該糾正PHP的一部分,而不是JavaScript的一個反正):

var i = "123"; 
i = new Number(i); // Number numeric wrapper 
var j = "123"; 
j = Number(j); // Number primitive 

順便說一句,如果有人感興趣的是我對parseInt的V8(谷歌瀏覽器)實現的好奇心,它的搜索結果爲here on google code

6

將其轉換爲在PHP中一個int之前json_encode()它:

$foo->bar = (int)$foo->bar; 
print('var foo = ' . json_encode($foo)); 

順便說一句,使用parseInt函數時,它是很好的做法始終指定第二個參數,除非你真的想串從0開始被解釋爲八進制等:

parseInt('010', 10); // 10 
2

你不會比parseInt函數來得到更好的,但真正的錯誤是,PHP是提供被認爲是一個數字作爲一個字符串。

和丹尼爾說的一樣 - 不要去尋找像這樣的微觀優化,直到你基準你的代碼並發現它值得去做。

0

如果對象較大,您可以嘗試JSON,它是一種打字格式,因此您無需轉換這些值。

0

它有多慢?這個過程被稱爲每秒多少次?有多少個不同的數字返回值?我一起鞭打劇本並測試了100,000個數字。從字符串解析它們需要687ms。在一個陣列中搜索它們需要541ms。這是一個非常小的改進。我同意其他海報。你可能不會比原生的parseInt()方法更好。

12

在JavaScript類型轉換是通過內置類型沒有new的構造函數完成,即

foo.bar = Number(foo.bar); 

這不同於parseInt()在幾個方面:

  • 前導零贏得不觸發八進制模式
  • 浮點值也將被解析
  • 整個字符串被解析時,即,如果它含有附加的非數字字符,則返回值將是NaN
0

鑄造比解析凌晨有點快但比搜索慢。

此外,在Firefox中,最快的方法是parseInt(),然後搜索。 Firefox的平均速度也比IE快6倍。有趣。

使用一元運算符的好主意。在Firefox中竟然可以與parseInt()相媲美。在IE中,它變成了最快的方法。

1

快速捷徑parseInt函數是

("78.5" | 0) //bitwise or forces the string to parse as int 

這是ASM用來表示在JS整數。