基本上我們欲將字串轉成數值來加以處理的方式,大致上有:「Number()」、「parseInt()」和「Number Object」等方式,由於使用字串轉成數值的機會相當多,例如:從「TextField」取值來處理、利用「loadVariables()」來載入外部的資料等…,究竟那種方式是最有效率的呢?
善用「Number()」來加以轉換
我們直接寫入下列程式來加以檢測:
「Number()」:
function test() { for(var j = 0 ; j < 100000; j++) { Number("10000"); } } var start = getTimer(); test(); trace(getTimer()-start);
結果:(取決於電腦速度而有所不一)
202
「parseInt()」:
function test() { for(var j = 0 ; j < 100000; j++) { parseInt("10000"); } } var start = getTimer(); test(); trace(getTimer()-start);
結果:(取決於電腦速度而有所不一)
314
從結果中我們不難發現,「Number()」在字串轉成數值的處理速度,的確比「parseInt()」較為快速~究竟是如何造成的呢?兩者不是都為「Global Function」?我們可從bytecode來觀察一下兩者究竟是如何處理的。
為何「Number()」速度較快
我們直接寫入下述程式在Frame[1],以方便驗證:
var a_num = Number("1.5"); var b_num = parseInt("1.5");
從bytecode中可得知,「Number()」是利用ActionCode「0x4a」(ActionToNumber)來處理的,而「parseInt()」則是採用ActionCode「0x3d」(ActionCallFunction)來處理之,重點在於前者只需要一個指令(Instruction),而後者卻仍需仰賴呼叫AVM(ActionScript Virtual Machine)所內建的函數。
本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。