Javascript逻辑处理:true&;真=假?

Javascript逻辑处理:true&;真=假?,javascript,Javascript,我有一个脚本,可以在客户单击“添加到购物车”时检查数量设置 在该站点上,可以打开/关闭是否允许分数数量 e、 一件衬衫只能以整件出售,但蛋白粉可以每公斤出售一部分。(0.5、1、1.5等) 在我的Javascript中,我检查是否允许分数数量,以及客户是否输入了分数数量 if ((allowFractionalQty === 0) && (quantity % 1 !== 0)) { errorMsg = "Only whole numbers may be entere

我有一个脚本,可以在客户单击“添加到购物车”时检查数量设置

在该站点上,可以打开/关闭是否允许分数数量

e、 一件衬衫只能以整件出售,但蛋白粉可以每公斤出售一部分。(0.5、1、1.5等)

在我的Javascript中,我检查是否允许分数数量,以及客户是否输入了分数数量

if ((allowFractionalQty === 0) && (quantity % 1 !== 0)) {
    errorMsg = "Only whole numbers may be entered";
    validator.showErrors(errorMsg);
}
出于某种原因,当quantity=1.5且AllowFractionalQuantity=0时,if语句的结果为False

我不明白为什么,因为

allowFractionalQty === 0  --> true
quantity % 1 !== 0  --> true
但是


那么为什么它呈现为False呢?

代码中的所有内容都应该工作,但我认为,应该为正确的类型添加一些附加内容::parseInt()和Number()


((parseInt(allowFractionalQty)==0)和&(Number(quantity)%1!==0))
在测试输入时,JavaScript看起来工作正常:

var allowFractionalQty=0;
变量数量='1.5';
console.log(allowFractionalQty==0);
console.log(数量%1!==0)

log((allowFractionalQty==0)和&(数量%1!==0))
可能是因为其中一个表达式的计算结果实际为false。我建议使用调试器并确认其中的所有值都是您期望的值,正如其他人所说的,根据您提供给我们的信息,它将评估为true。如果它对你来说是错误的,那么还有别的事情在发生。是否可以包含一些实际显示其计算结果为false的可运行代码?如果
allowFractionalQty==0
确实是
true
,并且如果
quantity%1!==0
是真的,那么你所说的是不可能的。是否确实没有使用
检查字符串值=而不是
==?为什么
allowFractionalQty
不是布尔值的True或False?如果您的目的不是为了运行代码,那么您不应该使用代码块而不是片段吗?对于已经是数字的值,绝对不需要使用
parseInt()
Number()
。如果
allowFractionalQty===0
true
,则表示
allowFractionalQty
中的值已经是一个数字。我选择此作为正确答案。:-)原因是我确实需要
allowFractionalQty
变量上的
parseInt
。该值是从PHP传递的,Javascript将其视为一个字符串。@Tim这意味着您的断言
allowFractionalQty==0
true
一开始就不正确。@Pointy-不要挑剔。这证明了逻辑没有错。根据您的更新,Javascript将值(从PHP传递)视为字符串。但我必须给斯拉瓦打勾,因为他首先想到了这一点。看起来他的解决方案盲目地把一切都变成了数字。此表达式
数量%1
将始终生成一个数字,因此无需添加显式转换。只有第一个表达式可以与上面所述的不同类型冲突。
((allowFractionalQty === 0) && (quantity % 1 !== 0)) --> false