【问题标题】:Why is [] !== [] in JavaScript? [duplicate]为什么 [] !== [] 在 JavaScript 中? [复制]
【发布时间】:2017-03-11 19:54:09
【问题描述】:

为什么 [] !== [] 在 JavaScript 中?

我通读了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness,但找不到任何可以解释这一点的东西。

编辑: 我不认为this questionthis question 与我的完全相同。它询问 == 操作符,它只是表现得很疯狂。答案是我的问题的答案,但不是同一个问题。

【问题讨论】:

  • 比较的是同一个对象而不是等价。
  • 一开始我也是这么想的,但是[] == [][] === []都返回false。
  • 因为列表实际上是对象,除非两个变量引用同一个对象,否则对象永远不会相等
  • 因为它们不是同一个对象。它只比较参考而不是内容
  • dorey.github.io/JavaScript-Equality-Table,根据您引用的页面中的链接。

标签: javascript equality equality-operator


【解决方案1】:

这会对两个数组文字进行引用检查,看看它们是否是同一个实例。您有两个文字的事实意味着您正在构建两个单独的数组,因此引用检查返回 false。这将返回 true:

var a = []
var b = a

//b === a

这是因为我们有两个对同一个数组的引用。

【讨论】:

    【解决方案2】:

    [] 每次写入时都会创建一个新的(空的)数组。您正在比较两个数组,无论它们的内容如何,​​都在比较它们的指针(或引用)。

    var array = [];
    var anotherArray = array; // these two will point to the same array, so they are equal
    
    
    array === anotherArray; // true
    array === []; // false
    
    
    array.push('something');
    anotherArray.length; // 1
    

    【讨论】:

      【解决方案3】:

      因为[]是一个对象,而对象的比较只有在比较的两边都指向完全相同的对象时才返回true。您创建了两个单独的对象,因此它们不相等。

      var x = []
      var y = x
      var z = []
      
      x == x // true
      x == y // true
      x == z // false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-09
        • 2018-06-06
        • 2012-06-05
        • 2015-08-10
        • 2012-08-09
        • 2018-10-19
        • 2023-03-06
        • 2019-12-15
        相关资源
        最近更新 更多