我有一個函數可以生成一個從3x3矩陣中的一個位置到另一個位置的路徑,這樣我就可以平滑地改變方向變化時的圖像變化。它返回一個包含定位參數的數組,這些參數在CSS類中被翻譯,例如:["top left vert", "left slow", "left"]
。在我的動畫邏輯中的後續setTimout()
調用中處理轉換。捕獲異常而不是比較性能的數組值?
在移動週期結束時,有問題的元素返回停止位置。這個轉換不是由生成路徑的函數處理的,而是它拋出一個異常。在我的動畫邏輯中,我有一個try/catch
塊,我只是簡單地忽略了拋出的異常。這樣,我知道,我要執行我停止轉換:
var move = moveClass.join(" ");
try {
move = updateDirection(move);
} catch(e) {}
if (move instanceof Array) {…} else {/* stop */}
而是拋出異常的函數會返回數組,在那裏我將不得不數組的元素將在同一位置的(而不是使用instanceof Array
)。
我知道一個人不應該濫用這樣的例外。 ;-)我的問題是:這是否比檢查數組的內容更昂貴(例如if (move[0] == move[1] && move[0] == move[2])
)?
「這是不是檢查數組的內容更加昂貴」 ---你花更多的時間寫這個問題比它會採取設立jsperf.com PS測試:一般的例外是貴 – zerkms
幾乎是肯定的。現代JavaScript實現可以很好地優化比較。我不知道有任何優化異常的實現。只在異常對象中構建堆棧跟蹤可能值得幾十萬比較。 –
爲什麼不簡單地返回'null',一個空字符串或類似的東西?這將只需要一個比較... – Bergi