javascript中检查条件的奇怪行为

Strange behaviour on checking condition in javascript

本文关键字:检查 条件 javascript      更新时间:2023-09-26

我正在编写代码,使用svg在屏幕上绘制六边形网格,我使用单个六边形而不是模式的原因是,我最终想使每个六边形都是一个对象来引用

我已经使用一些数学和点参考绘制了六边形。

与其让它变得复杂不如解释我的代码,这是我的代码https://jsfiddle.net/Snedden27/9nnrt7hp/8/,

我的问题是函数drawHexAround(cent)//第41行,该函数假设以质心'@cent'

围绕六边形绘制六边形。

检查条件如下:

if (!contains(drawnCentroids,centroidNew)) {
    makeHex(centroidNew);
    drawnCentroids.push(centroidNew);
}

这里是函数

function contains(a, obj) {
    var l = a.length;
    for (var i=0;i<l;i++) {
        // console.log(a[i],obj);
        // console.log(a[i] === obj);
        if (a[i] === obj) {
            // console.log('true');
            return true;
        }
    }
    return false;
}

它会画出六边形对吧,但是它也会画出已有的六边形尽管我用contains(a,obj)

检查了条件

我不明白为什么这个条件结果总是为真,而很明显在某些情况下它应该导致假。

你犯了一个错误,检查两个对象的相等性将检查对象中的每个属性的相等性-它不是!

你没有在问题中指定,但从代码中我们可以看到你正在检查的对象看起来像:

centroidNew = {
         cx: xRight,
         cy: yMidTop
     };

你有一个数组你要用一个循环来寻找。

除非a[0]obj是对完全相同的对象的引用,否则测试if (a[i] === obj) {永远不会求值为真。

要解决这个问题,你可以显式地检查属性,因为只有两个属性,这可能对你有用

if (a[i].cx === obj.cx && a[i].cy === obj.cy) {

这里是您的小提琴:https://jsfiddle.net/9nnrt7hp/4/的更新,现在它有时记录true从该测试