[英]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”。
=
不检查相等性,仅用于分配。 在JavaScript中检查相等性的运算符为==
(对于“抽象”相等)和===
(对于“严格”相等)。 如果a
和b
都是数字,则==
和===
作用相同。
===
): function checkEqual(a, b) {
return (a === b ? true : false );
}
checkEqual(1, 2);
在这里,您正在使用身份运算符(也称为严格相等运算符)。 它检查值是否相等(并且类型相同)。
由于a
为1
而b
为2
,则a === b
变为false
(因为它们不同)。 当然是false ? true : false
false ? true : false
为false
。 因此,整个事情返回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
并将其返回。 因此a
和b
均为2
,而a = b
值为2
。 最后,由于2
是真实值,所以2 ? true : false
2 ? true : false
为true
。
注意:这也意味着,如果要为b
传递一个伪造的值,则会得到false
。 例如,调用: checkEqual(1, null);
传递给a
的值无关紧要。
==
): function checkEqual(a, b) {
return (a == b ? true : false );
}
checkEqual(1, 2);
在这里,您将使用相等运算符。 它检查值是否相等(但是,可以自由转换值进行检查)。
与第一个类似,它将返回false
。 有什么区别? 好吧,类型。 在Javascript中, "1" == 1
为true
而"1" === 1
为false
。 也就是说,通过使用==
,可以允许运行时转换值以进行比较,而对于===
,则不允许。
请参阅JavaScript比较运算符: 在JavaScript比较中应使用 Identity 等于 Equal,以及等于运算符(== vs ====)?
在第二个代码段中,您使用赋值运算符=
而不是比较运算符之一( ==
或===
) ,这是这里的主要错误。
现在,为简明扼要地回答您的特定问题, 文档报告说: "The assignment operation evaluates to the assigned value."
因此,例如:
a = b ? true : false --> if b != 0, this returns true,
--> if b = 0, this returns false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.