我确信我在这里缺少一些JavaScript基础知识,但任何人都可以帮助我理解为什么这些评估方式不同?最后一行。
$("input[name=myGroup]").click(function () {
if ($(this).is(":checked")) {
if ($(this).val() != "Customers") { //do the stuff...
和
$("input[name=myGroup]").click(function () {
if ($(this).is(":checked")) {
if (!$(this).val() == "Customers") { //do the stuff
在我的特定情况下,我认为他们都会评价为真,并“做这些事”。但似乎只有第一个块实际上是根据我的想法进行评估。
在查看MDN之后,尝试深入了解比较运算符https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comparison_operators VS 使用逻辑运算符https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comparison_operators但我仍然不太明白为什么它们产生不同的结果。感谢。
答案 0 :(得分:5)
Order of operations很重要。 !
在==
之前,所以
!$(this).val() == "Customers"
被视为
false == "Customers"
当然会返回false
。尝试使用
!($(this).val() === "Customers")
代替:注意明确的括号。我还使用了严格相等运算符(===
而不是==
),因此也比较了类型。
当然,只需使用
$(this).val() !== "Customers"
工作得非常好,而且最具可读性。
答案 1 :(得分:0)
!x == y
NOT(ToBool(x))
类似于 RHS y
true
进行测试之前始终会评估为false
或y
bool == string
通常是false
ToNumber(string)
为1
且bool
为true
,则会返回true
ToNumber(string)
为0
且bool
为false
,则会返回true
false
x != y
x
类似于 RHS y
,然后执行NOT(result)
!(x == y)
因此,两者之间的区别在于NOT
仅 1 中的 LHS ,以及< em> 2 仅在==
测试后应用。
我将==
称为 ,因为它是abstract equality比较。如果您想明确测试,您可能希望使用===
或它的否定!==
,这是strict equality比较。