我正在阅读 Adobe 库中的代码 (snap.svg.js),我看到了这段代码,这让我很困惑:
function curveDim(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),
b = 2 * (c1x - p1x) - 2 * (c2x - c1x),
c = p1x - c1x,
t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / 2 / a,
t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / 2 / a;
Math.abs(t1) > "1e12" && (t1 = .5);
Math.abs(t2) > "1e12" && (t2 = .5);
由于公式非常复杂,我无法给出测试它的值,所以我想问一个一般性问题:为什么可以将 Math.abs(t1) 与字符串 '1e12' 进行比较?这不是将 float 转换为字符串然后进行词法比较吗?如果变量 a 为零怎么办?这是好的代码吗?任何对作者想要做什么以及它是否正确的解释都会很棒。
最佳答案
否,>
运算符将两个操作数都转换为数字( http://es5.github.io/#x11.8.2 、 http://es5.github.io/#x11.8.5 )。
看看当我将字符串转换为数字时会发生什么:
> +"1e12"
1000000000000
1e12
is actually a valid number literal表示1 * 1012。不知道为什么他们使用字符串,Math.abs(t1) > 1e12
也可以正常工作。
关于javascript - 将 float 与字符串进行比较时,此代码是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21640980/