我有一个函数可以生成一个从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