Javascript 如何防止恼人的浮点连接

Javascript 如何防止恼人的浮点连接,javascript,Javascript,我在我的一个项目中有一个函数,它做一些向量计算。最近我开始注意到结果中的不一致性,当我深入挖掘时,我发现在某些地方,JavaScript会执行串联而不是加法。搜索时,我发现可以通过添加parsefloat()来防止它,以确保变量是浮动的。现在我有了这个: function getsqSegDistID(p, p1, p2) { var x = parseFloat(p1.x), y = parseFloat(p1.y), dx = p2.x - x,

我在我的一个项目中有一个函数,它做一些向量计算。最近我开始注意到结果中的不一致性,当我深入挖掘时,我发现在某些地方,JavaScript会执行串联而不是加法。搜索时,我发现可以通过添加
parsefloat()
来防止它,以确保变量是浮动的。现在我有了这个:

function getsqSegDistID(p, p1, p2) {
    var x = parseFloat(p1.x),
        y = parseFloat(p1.y),
        dx = p2.x - x,
        dy = p2.y - y;
    if (dx !== 0 || dy !== 0) {
        var t = (parseFloat((p.x - x) * dx) + parseFloat((p.y - y) * dy)) / (parseFloat(dx * dx) + parseFloat(dy * dy));
        if (t > 1) {
            x = p2.x;
            y = p2.y;
        } else if (t > 0) {
            x = parseFloat(x) + parseFloat(dx * t);
            y = parseFloat(y) + parseFloat(dy * t);
        }
    }
    dx = p.x - x;
    dy = p.y - y;
    return parseFloat(dx*dx) + parseFloat(dy*dy);
}
看到我放在那里的所有
parseFloat
了吗?

所以我的问题是,在每次添加之前添加一个parsefloat会显著降低函数的性能。现在执行此操作所需的时间是以前的5倍

1.我是否必须在每次加法之前放入parseFloat?还是有更好的办法

2.我是一名C/Java开发人员,但我正在帮助一位朋友编写一些处理逻辑。那么为什么JavaScript没有某种形式的数据类型强制呢

  • 如果一个或多个操作数是字符串,JavaScript将尝试连接。您当然不需要每次都调用
    parseFloat
    ,只要确保对所有传递的变量都调用它即可。我看到您最初解析
    p1.x
    p1.y
    ,但对
    p
    p2
    中的值不做同样的操作

  • JavaScript是一种解释语言,因此是动态类型化的。必须编译静态类型的语言;这只是语言设计中的许多权衡之一

  • 如果一个或多个操作数是字符串,JavaScript将尝试连接。您当然不需要每次都调用
    parseFloat
    ,只要确保对所有传递的变量都调用它即可。我看到您最初解析
    p1.x
    p1.y
    ,但对
    p
    p2
    中的值不做同样的操作

  • JavaScript是一种解释语言,因此是动态类型化的。必须编译静态类型的语言;这只是语言设计中的许多权衡之一

  • 关于类型:。(2)的答案很简单:因为它不是。这是一种设计不同的语言。关于类型:。(2)的答案很简单:因为它不是。这是一种设计不同的语言。