JavaScript数值比较结果错误:三字段卡片搜索功能query3判断异常
故障根因
布尔变量的初始化位置错误
你把boolean2、boolean3的初始值定义在了.each()遍历循环的外部,导致变量值会被上一轮遍历的结果污染。只要前一轮遍历把boolean3赋值为true,后续所有遍历执行boolean3 = (boolean3 ? boolean3 : (price <= query3))时,三元运算符会直接返回已有的true值,根本不会执行后面的price <= query3比较逻辑,所以出现比较结果为false但boolean3依旧为true的现象。多条件判断写法错误
你当前用来判断是否显示卡片的boolean1 === boolean2 === boolean3写法不符合逻辑要求。这种连续相等判断的实际执行逻辑是先计算boolean1 === boolean2得到一个布尔值,再将这个结果和boolean3做相等判断,完全不能实现「三个条件同时满足才显示卡片」的需求。
修复方案
把三个布尔变量的初始化都放到each循环内部,同时修改多条件判断的写法:
const marketSearchFunction = function() { const query1 = $('#market-search').val().toLowerCase(); const query2 = parseFloat($('#market-min').val()); const query3 = parseFloat($('#market-max').val()); $('.market-frame').each(function(){ // 每遍历一张卡片都重新初始化三个判断条件,避免变量污染 let boolean1 = false let boolean2 = isNaN(query2) ? true : false let boolean3 = isNaN(query3) ? true : false const price = parseFloat($(this).find('.price').data('value')) boolean1 = $(this).text().toLowerCase().indexOf(query1) !== -1 boolean2 = boolean2 || (price >= query2) boolean3 = boolean3 || (price <= query3) console.log(price, query3, boolean3, (price <= query3)) // 三个条件同时为true才显示卡片 showCard($(this), boolean1 && boolean2 && boolean3) }); }
内容的提问来源于stack exchange,提问作者Brian Lewis
相关产品推荐
相关产品推荐

