javascript中检查条件的奇怪行为
Strange behaviour on checking condition in javascript
我正在编写代码,使用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
从该测试
相关文章:
- 如何获取jQuery Confirm(jConfirm)值并使用该值检查条件
- 如何在angularjs中更改文本框类,同时键入和检查条件
- 每次调用函数后都要检查条件
- for循环在javascript中循环一次后不检查条件
- 网格视图中的Checbox检查条件无法按JavaScript的要求工作
- JavaScript - 是否有必要先检查条件
- 检查条件后如何在JavaScript中转到下一页
- 检查条件后转到给定的网址
- 如何使用ASCII值在JavaScript中检查条件
- 非常基本的 JavaScript,使用 || 检查条件(或)
- 表单验证在检查条件后未发出警报
- 继续检查条件是否成立
- 在加载时,如何以数组的形式检查条件中的多个值
- 如何在以编程方式在 JavaScript 中提交表单之前检查条件
- javascript中检查条件的奇怪行为
- 使& # 39;dom-if& # 39;根据另一个元素中的属性检查条件
- Angular ng-show不会连续检查条件
- Javascript在span标签的情况下没有正确检查条件
- 如何在Javascript函数中检查条件
- 检查条件后使用jQuery取消复选框