【问题标题】:When should comparator === be used over ==?什么时候应该在 == 上使用比较器 ===?
【发布时间】:2011-09-09 04:43:10
【问题描述】:

所以在过去的 5 年里,我一直在学校和工作中积极地编写机器人程序,但我从未试图找出 == 和 === 之间的区别。

我可以使用单个 = 来查看比较器的区别,它会通过循环查看左手变量的值,例如:

while($line = getrow(something))

那么在如下语句中 == 和 === 有什么区别:

if ($var1 === $var2)
//versus
if ($var1 ==  $var2)

同样:

if ($var1 !== $var2)
//versus
if ($var1 != $var2)

我一直使用双等号,我从未使用过三等号。 我使用的语言有:php、vb.net、java、javascript、c/c++。

我有兴趣系统地学习与双引号不同的三引号中发生的事情。

什么时候应该使用一个而不是另一个?感谢您满足我的好奇心:)

【问题讨论】:

  • $var not JavaScript ...但无论如何,用 标记问题适当的语言.
  • @pst, $var 是 Javascript 中完全合法的标识符。 (当然var 不会。)
  • @Kirk Woll 我知道。我的评论是站得住脚的。所有的。 :)

标签: if-statement compare equals


【解决方案1】:

通常,== 只考虑值的相等性。比如说……

5 == 5.0  //true

但是,=== 也考虑值类型(在我熟悉的语言中)。

var five = 5;
var five_float = (float)5.0;

five === 5;        //true - both int, both equal to 5
five_float === 5;  //false - both equal 5 but one is an int and one is a float

仅供参考,= 运算符(通常称为赋值运算符)用于将左侧参数的值设置为右侧。这很明显。但是,在大多数语言中,如果分配成功,这也将返回 true。你要避免在你打算使用 ==(或 ===)的地方使用 =,因为它看起来像一个比较,但它不是 - 它会意外返回 true。

例如,假设您要检查一个数字是否等于 10...

myNumber = 7;
if(myNumber = 10)
{
    //will always be true and execute this code because myNumber will successfully
    //be assigned the value of 10 instead of checking to see if the number is 10.
    //oops!
}

最后一点——这在 PHP 和 JavaScript 中是正确的。我认为 C++ 或 Java 中没有 === 运算符,而 == 的含义也略有不同。

【讨论】:

  • 在 JavaScript 中 5 === 5.0 也是如此。 Java 和 C/C++ 都没有 === 等效项。实际上,哪些语言=== 或等价物?
  • 很好@pst,我添加了一个明确的强制转换来浮动。 5!==(浮点数)5。我认为您可能会发现 === 在具有惰性评估和松散类型的语言中很常见。 PHP、JavaScript 和我相信 Python 是列表的开始。
  • 抱歉,我指的是 Groovy,而不是 Python。
  • 在 Javascript 中,它们不区分浮点数和整数。它们都只是“数字”类型。这就是为什么5 === 5.0000。一个更好的例子可能是5 == '5'5 !== '5'
【解决方案2】:

$a === $b 如果 $a 等于 $b 并且它们属于同一类型,则为 TRUE。 (在 PHP 4 中引入)

$a !== $b 如果 $a 不等于 $b,或者它们不是同一类型,则为 TRUE。 (在 PHP 4 中引入)

Reference

【讨论】:

    【解决方案3】:

    == 将只检查值(相等运算符),其中 === 也检查数据类型(严格相等运算符)。

    1 == '1' 为真。
    1 === '1' 为假 - 第一个是整数,第二个是字符串。

    1 == true 为真。
    1 === true 为假 - 第一个是整数,第二个是布尔值。

    通常您希望使用 ==(等式运算符),但有时您希望确保事物属于特定类型。我相信有人可以提供一个例子,我想不出一个,但我肯定用过。

    【讨论】:

      【解决方案4】:

      在 PHP 和 JavaScript 中(我不确定其他语言的三重 === 语法是否有效)不同之处在于 === 是一个严格的比较。而== 是松散的。这意味着=== 比较值和类型,但== 只比较值。下面的错误 PHP 代码就是一个完美的例子:

      $str = 'Zebraman stole my child\'s pet lime!';
      
      // Search for zebra man
      if(strpos($str, 'Zebraman')){
          echo 'The string contains "Zebraman"';
      }else{
          echo 'The string doesn\'t contain "Zebraman"';
      }
      

      Example Here

      因为strpos($str, 'Zebraman') 返回0(字符串Zebraman 的索引),并且因为0falsy。该代码将输出The string doesn't contain "Zebraman"。正确的代码使用了与false的严格比较:

      $str = 'Zebraman stole my child\'s pet lime!';
      
      // Search for zebra man
      if(strpos($str, 'Zebraman') !== false){
          echo 'The string contains "Zebraman"';
      }else{
          echo 'The string doesn\'t contain "Zebraman"';
      }
      

      Example Here

      See the PHP man page on strpos

      【讨论】:

        【解决方案5】:

        我不知道这是否适用于所有语言,但在 javascript 中 === 代表类型比较。

        0 == false (true) 0 === false (false)
        

        比较假值时不使用 === 是一个常见的 js 错误。

        var a;
        
        if(a) do something
        

        (如果 a 为零,则不会输入)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-02
          • 2011-04-15
          • 2017-04-10
          • 2012-03-19
          • 2018-05-12
          • 2018-12-11
          • 1970-01-01
          • 2022-09-28
          相关资源
          最近更新 更多