首先 - 我的描述;)parseInt替代
我有一個來自服務器的XmlHttpRequests JSON響應。 MySQL驅動程序輸出所有數據爲字符串,PHP返回它原樣,所以任何整數返回爲字符串,因此:
JS中的parseInt()函數是否有任何快速替代(hack),它可以解析純數字字符串,例如
var foo = {"bar": "123"};
...
foo.bar = parseInt(foo.bar); // (int) 123
首先 - 我的描述;)parseInt替代
我有一個來自服務器的XmlHttpRequests JSON響應。 MySQL驅動程序輸出所有數據爲字符串,PHP返回它原樣,所以任何整數返回爲字符串,因此:
JS中的parseInt()函數是否有任何快速替代(hack),它可以解析純數字字符串,例如
var foo = {"bar": "123"};
...
foo.bar = parseInt(foo.bar); // (int) 123
要轉換爲整數只需使用一元+運算符,它應該是最快的方法:
var int = +string;
轉換成其它類型可以以類似的方式來完成:
var string = otherType + "";
var bool = !!anything;
首先,你有沒有記錄,它是緩慢的,並造成問題?否則,我不打算尋找解決方案,因爲確實沒有問題。
其次,我猜想,因爲parseInt是一個原生的JS方法,它將以非常快的方式實現,並且可能以VM的本地語言(可能是C,取決於瀏覽器/ VM )。我認爲你可能會遇到一些麻煩,使得使用純JS的更快的方法。 =)
當然,我不是一個JS大師,所以我不確定,但這是我的直覺告訴我的,而且往往是「我怎麼會更快libraryFunction()的替代方法?「的問題。
有沒有其他原因不使用parseInt - 比較parseInt(「07」)parseInt(「08」) – 2009-02-27 14:14:41
那是你應該使用parseInt(「07」,10) – 2011-04-20 13:25:42
數量的構造也存在,但它應該是一樣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。
將其轉換爲在PHP中一個int之前json_encode()
它:
$foo->bar = (int)$foo->bar;
print('var foo = ' . json_encode($foo));
順便說一句,使用parseInt函數時,它是很好的做法始終指定第二個參數,除非你真的想串從0開始被解釋爲八進制等:
parseInt('010', 10); // 10
你不會比parseInt函數來得到更好的,但真正的錯誤是,PHP是提供被認爲是一個數字作爲一個字符串。
和丹尼爾說的一樣 - 不要去尋找像這樣的微觀優化,直到你基準你的代碼並發現它值得去做。
如果對象較大,您可以嘗試JSON,它是一種打字格式,因此您無需轉換這些值。
它有多慢?這個過程被稱爲每秒多少次?有多少個不同的數字返回值?我一起鞭打劇本並測試了100,000個數字。從字符串解析它們需要687ms。在一個陣列中搜索它們需要541ms。這是一個非常小的改進。我同意其他海報。你可能不會比原生的parseInt()方法更好。
在JavaScript類型轉換是通過內置類型沒有new
的構造函數完成,即
foo.bar = Number(foo.bar);
這不同於parseInt()
在幾個方面:
NaN
鑄造比解析凌晨有點快但比搜索慢。
此外,在Firefox中,最快的方法是parseInt(),然後搜索。 Firefox的平均速度也比IE快6倍。有趣。
使用一元運算符的好主意。在Firefox中竟然可以與parseInt()相媲美。在IE中,它變成了最快的方法。
int = string * 1呢? – dusoft 2009-02-27 13:34:49
不錯,也適用於漂浮物。 – KooiInc 2009-02-27 14:29:27
無需繁殖。使用一元運算符:int = + string; (但是JavaScript中的每個數字仍然是一個浮點數(但我認爲我聽說V8可能有一些優化並實際使用整數) – some 2009-02-27 16:35:00