簡體   English   中英

Dart 中的 == 和 === 有什么區別?

[英]What is the difference between == and === in Dart?

Dart 支持 == 和 === 嗎? 平等和身份有什么區別?

Dart 支持==表示相等, identical(a, b)表示相同。 Dart 不再支持===語法。

當你想檢查對象是否“相等”時,使用==表示相等。 您可以在您的類中實現==方法來定義相等的含義。 例如:

class Person {
  String ssn;
  String name;

  Person(this.ssn, this.name);

  // Define that two persons are equal if their SSNs are equal
  bool operator ==(other) {
    return (other is Person && other.ssn == ssn);
  }
}

main() {
  var bob =  Person('111', 'Bob');
  var robert =  Person('111', 'Robert');

  print(bob == robert); // true

  print(identical(bob, robert)); // false, because these are two different instances
}

注意a == b的語義是:

  • 如果abnull ,則返回identical(a, b)
  • 否則,返回a.==(b)

使用identical(a, b)檢查兩個變量是否引用同一個實例。 identicaldart:core中的頂級函數。

應該注意的是,在 dart 中使用identical的函數有一些注意事項,正如這個 github 問題評論所提到的:

規范已更新為像這樣對待雙打之間的相同:

identical() 函數是預定義的 dart 函數,如果它的兩個參數是:

  • 同一個對象。
  • 類型為 int 且具有相同的數值。
  • double 類型,不是 NaN,並且具有相同的數值。

這意味着即使 dart 中的所有內容都是對象,並且fg是不同的對象,但以下內容會打印true

int f = 99;
int g = 99;
print(identical(f, g));

因為 int 的值相同,而不是引用。


因此,為了回答您的問題, ==用於標識兩個對象是否具有相同的值,但identical用於測試引用相等性,除了上面摘錄所標識的doubleint的情況。

請參閱: 相等和關系運算符

由於據說 DART 與存在 === 的 javascript 相關,我希望不要很快被否決。

身份作為一個概念意味着 1 等於 1,但 1.0 不等於 1,false 也不等於 0,“2”也不等於 2,即使它們相互求值並且 1==1.0 返回 true。

應該注意的是,在 Dart 中, identical的工作方式類似於 Javascript,其中(5.0 == 5)true ,但identical(5.0, 5)false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM