Javascript 将浮点数与字符串进行比较时,此代码是否有效?

Javascript 将浮点数与字符串进行比较时,此代码是否有效?,javascript,Javascript,我正在读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

我正在读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”进行比较?这难道不能将浮点数转换成字符串,然后进行词法比较吗?如果变量a为零呢?这是好代码吗?任何关于作者试图做什么以及它是否正确的解释都将是非常好的。

否,
运算符将两个操作数都转换为数字(,)

查看将字符串转换为数字时发生的情况:

> +"1e12"
1000000000000

表示1*1012。不知道他们为什么使用字符串,
Math.abs(t1)>1e12
也可以正常工作。

不,
运算符将两个操作数都转换为数字(,)

查看将字符串转换为数字时发生的情况:

> +"1e12"
1000000000000

表示1*1012。不知道他们为什么使用字符串,Math.abs(t1)>1e12也同样适用。

您可以自己轻松测试

var t1 = 10000000000000;
if (Math.abs(t1) > "1e12")
    console.log('t1 is greater');
else
    console.log('t1 is less or equal');

请参见

您可以自己轻松地进行测试

var t1 = 10000000000000;
if (Math.abs(t1) > "1e12")
    console.log('t1 is greater');
else
    console.log('t1 is less or equal');

参见

“1e12”是速记指数,相当于100000000000“1e12”是速记指数,相当于100000000000谢谢解释。我也不能怀疑你的212k声誉:)@bits:永远怀疑!人们会犯错:)但你可以相信规范;)不客气!正是我想要的。感谢您提供ECMAScript链接,该链接表明它是有效代码。我也不知道他们为什么使用字符串。我想,因为像我们这样的人如果不是字符串会更加困惑。如果我不得不在黑暗中随机尝试,我会说,也许是为了防止迷你脚本的错误解析谢谢你的解释。我也不能怀疑你的212k声誉:)@bits:永远怀疑!人们会犯错:)但你可以相信规范;)不客气!正是我想要的。感谢您提供ECMAScript链接,该链接表明它是有效代码。我也不知道他们为什么使用字符串。我想,因为像我们这样的人如果不是字符串会更加困惑。如果我必须在黑暗中随机尝试,我会说,也许是为了防止来自小型脚本的错误解析。正如Felix解释的,javascript转换为“1e12”因为它是
的操作数之一,所以无法对其进行编号。谢谢Olaf。是的,测试证明它是正确的。Felix的答案告诉了我原因。明白了,正如Felix解释的,javascript将“1e12”转换为数字,因为它是
的操作数之一。谢谢Olaf。是的,测试证明它是正确的。费利克斯的回答告诉了我原因。