繁体   English   中英

为什么在带有条件(三元)运算符的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变为真。

您想要做的是使用相等运算符==检查。

  • =是赋值运算符。
  • ==是相等运算符。
  • ===是严格相等运算符。

查看文档以进行深入研究。

=不检查相等性,仅用于分配。 在JavaScript中检查相等性的运算符为== (对于“抽象”相等)和=== (对于“严格”相等)。 如果ab都是数字,则=====作用相同。

第一种情况( === ):

function checkEqual(a, b) {
  return (a === b ? true : false );
}

checkEqual(1, 2);

在这里,您正在使用身份运算符(也称为严格相等运算符)。 它检查值是否相等(并且类型相同)。

由于a1b2 ,则a === b变为false (因为它们不同)。 当然是false ? true : false false ? true : falsefalse 因此,整个事情返回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的值赋给ba并将其返回。 因此ab均为2 ,而a = b值为2 最后,由于2真实值,所以2 ? true : false 2 ? true : falsetrue

注意:这也意味着,如果要为b传递一个伪造的值,则会得到false 例如,调用: checkEqual(1, null); 传递给a的值无关紧要。


您没有做的情况( == ):

function checkEqual(a, b) {
  return (a == b ? true : false );
}

checkEqual(1, 2);

在这里,您将使用相等运算符。 它检查值是否相等(但是,可以自由转换值进行检查)。

与第一个类似,它将返回false 有什么区别? 好吧,类型。 在Javascript中, "1" == 1true"1" === 1false 也就是说,通过使用== ,可以允许运行时转换值以进行比较,而对于=== ,则不允许。

请参阅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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM