【问题标题】:Javascript difference between "=" and "===" [duplicate]“=”和“===”之间的Javascript区别[重复]
【发布时间】:2015-09-03 19:13:51
【问题描述】:

我很难理解下面的功能。直到我在if 语句中将= 更改为===,我才知道为什么我的脚本不起作用,如下所示。为什么=== 有效而= 无效?

var testTest = function(answer) {
    if (answer === "doggies") {
       return "My favorite animal!";
    } else {
       return "Tested";
    }
};
testTest("doggies")

当我输入doggies 时,它会显示My favorite animal! 以及其他任何内容,它会返回Tested

但是,当我将 if 语句中的 === 更改为 = 时,else 部分不起作用。

var testTest = function(answer) {
    if (answer = "doggies") {
       return "My favorite animal!";
    } else {
       return "Tested";
    }
};
testTest("elephant")

【问题讨论】:

  • = 是赋值运算符,=== 是比较运算符。现在期待这两个你会发现大量的文章。
  • @AlexG 不,这个问题是不同的。这仍然是一个糟糕的问题,但有所不同。
  • 实际上有 3 个不同的 ======。第一个用于assignment,另外两个用于comparison

标签: javascript function


【解决方案1】:

作为学习 JS 的快速参考:

=   assignment operator
==  equal to
=== equal value and equal type

!=  not equal
!== not equal value or not equal type

【讨论】:

    【解决方案2】:

    我假设你知道= 是用于赋值的,毕竟你已经在第一行使用了赋值:

    var testTest = function(answer) {
    

    我认为你认为这不会在这里比较任何东西(或者你呢?)。

    问题仍然存在,为什么if (answer = "doggies") 中的= “不起作用”?

    赋值是一个表达式。该表达式的结果是分配的值。在这里,answer = "doggies" 的结果是"doggies",即你实际上是在运行if ("doggies")

    JavaScript 执行类型强制。这意味着它会根据特定规则在必要时自动将一种数据类型的值转换为不同数据类型的值。

    if 语句的条件必须解析为布尔值。但是在这里您使用字符串值作为条件。 String -> Boolean 转换规则非常简单:

    • 空字符串转换为false
    • 非空字符串转换为true

    所以,在类型转换之后,语句相当于if (true),因此它总是会执行第一个块,而不是else块。

    【讨论】:

      【解决方案3】:

      您需要使用===== 进行相等检查。 = 是赋值运算符。

      您可以在MDN 上阅读有关赋值运算符的信息。

      【讨论】:

        猜你喜欢
        • 2010-10-06
        • 2017-04-11
        • 2018-09-20
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 2017-06-25
        • 2013-01-28
        相关资源
        最近更新 更多