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