为什么使用条件(三元)运算符在 javascript 中使用“=”与“===”会得到不同的结果?
Why do I get different results with "=" vs. "===" in javascript with Conditional (Ternary) Operators?
我想在 javascript 中编写一个程序,在两个整数相等时生成 "true",在不相等时生成 "false"。
我试过使用“=”符号和“===”符号,但我不知道为什么程序的结果会根据我使用的符号而改变,即使不改变程序中的数字职能。
这段代码的结果是 "false",这就是我想要的:
function checkEqual(a, b) {
return (a === b ? true : false );
}
checkEqual(1, 2);
此代码生成 "true",这不是我想要的:
function checkEqual(a, b) {
return (a = b ? true : false );
}
checkEqual(1, 2);
两次尝试checkEqual()中的数字相同,但我想知道为什么第二次是"true"。
您正在将 a
值分配给 b
值。因此,a
变为真。
您要做的是使用相等运算符 ==
.
检查
=
是赋值运算符。
==
是相等运算符。
===
是严格相等运算符。
看看 documentation 深入了解。
=
不检查相等性,只用于赋值。在 JavaScript 中检查相等性的运算符是 ==
(对于 "abstract" 相等性)和 ===
(对于 "strict" 相等性)。如果 a
和 b
都是数字,那么 ==
和 ===
的效果相同。
第一种情况(===
):
function checkEqual(a, b) {
return (a === b ? true : false );
}
checkEqual(1, 2);
此处您使用的是身份运算符(a.k.a。严格相等运算符)。它检查值是否相等(并且类型相同)。
因为a
是1
而b
是2
,那么a === b
就变成了false
(因为它们不同)。当然 false ? true : false
是 false
。所以,整个事情 returns false
。是的,您可以这样做:
function checkEqual(a, b) {
return a === b;
}
checkEqual(1, 2);
第二种情况(=
):
function checkEqual(a, b) {
return (a = b ? true : false );
}
checkEqual(1, 2);
这里您使用的是赋值运算符。这不是相等性或身份检查。
在这种情况下,a = b
将 b
的值赋给 a
并 return 赋给它。因此 a
和 b
都将是 2
,并且 a = b
计算为 2
。最后,因为 2
是一个 truthy 值,所以 2 ? true : false
是 true
.
注意:这也意味着如果您为 b
传递 falsy 值,您将得到 false
。例如调用:checkEqual(1, null);
传递给 a
的值是无关紧要的。
你没做过的案例(==
):
function checkEqual(a, b) {
return (a == b ? true : false );
}
checkEqual(1, 2);
在这里您将使用相等运算符。它检查值是否相等(但是,可以自由转换值以进行检查)。
与第一个类似,这将 return false
。有什么不同?好吧,类型。在 Javascript 中,"1" == 1
是 true
,但 "1" === 1
是 false
。也就是说,通过使用 ==
允许运行时转换值以便比较它们,但使用 ===
则不允许。
见JavaScript comparison operators: Identity vs. Equality and Which equals operator (== vs ===) should be used in JavaScript comparisons?
在您的第二个代码片段中,您使用的是 赋值运算符 =
而不是 比较运算符之一(==
或===
),这是这里的主要错误。
现在,为了简要回答您的具体问题,documentation报告:"The assignment operation evaluates to the assigned value."
因此,例如:
a = b ? true : false --> if b != 0, this returns true,
--> if b = 0, this returns false
我想在 javascript 中编写一个程序,在两个整数相等时生成 "true",在不相等时生成 "false"。
我试过使用“=”符号和“===”符号,但我不知道为什么程序的结果会根据我使用的符号而改变,即使不改变程序中的数字职能。
这段代码的结果是 "false",这就是我想要的:
function checkEqual(a, b) {
return (a === b ? true : false );
}
checkEqual(1, 2);
此代码生成 "true",这不是我想要的:
function checkEqual(a, b) {
return (a = b ? true : false );
}
checkEqual(1, 2);
两次尝试checkEqual()中的数字相同,但我想知道为什么第二次是"true"。
您正在将 a
值分配给 b
值。因此,a
变为真。
您要做的是使用相等运算符 ==
.
=
是赋值运算符。==
是相等运算符。===
是严格相等运算符。
看看 documentation 深入了解。
=
不检查相等性,只用于赋值。在 JavaScript 中检查相等性的运算符是 ==
(对于 "abstract" 相等性)和 ===
(对于 "strict" 相等性)。如果 a
和 b
都是数字,那么 ==
和 ===
的效果相同。
第一种情况(===
):
function checkEqual(a, b) {
return (a === b ? true : false );
}
checkEqual(1, 2);
此处您使用的是身份运算符(a.k.a。严格相等运算符)。它检查值是否相等(并且类型相同)。
因为a
是1
而b
是2
,那么a === b
就变成了false
(因为它们不同)。当然 false ? true : false
是 false
。所以,整个事情 returns false
。是的,您可以这样做:
function checkEqual(a, b) {
return a === b;
}
checkEqual(1, 2);
第二种情况(=
):
function checkEqual(a, b) {
return (a = b ? true : false );
}
checkEqual(1, 2);
这里您使用的是赋值运算符。这不是相等性或身份检查。
在这种情况下,a = b
将 b
的值赋给 a
并 return 赋给它。因此 a
和 b
都将是 2
,并且 a = b
计算为 2
。最后,因为 2
是一个 truthy 值,所以 2 ? true : false
是 true
.
注意:这也意味着如果您为 b
传递 falsy 值,您将得到 false
。例如调用:checkEqual(1, null);
传递给 a
的值是无关紧要的。
你没做过的案例(==
):
function checkEqual(a, b) {
return (a == b ? true : false );
}
checkEqual(1, 2);
在这里您将使用相等运算符。它检查值是否相等(但是,可以自由转换值以进行检查)。
与第一个类似,这将 return false
。有什么不同?好吧,类型。在 Javascript 中,"1" == 1
是 true
,但 "1" === 1
是 false
。也就是说,通过使用 ==
允许运行时转换值以便比较它们,但使用 ===
则不允许。
见JavaScript comparison operators: Identity vs. Equality and Which equals operator (== vs ===) should be used in JavaScript comparisons?
在您的第二个代码片段中,您使用的是 赋值运算符 =
而不是 比较运算符之一(==
或===
),这是这里的主要错误。
现在,为了简要回答您的具体问题,documentation报告:"The assignment operation evaluates to the assigned value."
因此,例如:
a = b ? true : false --> if b != 0, this returns true,
--> if b = 0, this returns false