Dart2js数值类型:确定值是int还是double

时间:2017-05-13 04:07:31

标签: dart dart2js

我试图确定某个函数的dynamic参数是真的是int还是double而且我发现了令人惊讶的行为(至少是我)。

任何人都可以解释这个输出(在dartpad上制作)吗?

foo(value) {
  print("$value is int: ${value is int}");
  print("$value is double: ${value is double}");
  print("$value runtimetype: ${value.runtimeType}");
}

void main() {
  foo(1);
  foo(2.0);
  int x = 10;
  foo(x);
  double y = 3.1459;
  foo(y);
  double z = 2.0;
  foo(z);
}

输出:

1 is int: true
1 is double: true
1 runtimetype: int
2 is int: true
2 is double: true
2 runtimetype: int
10 is int: true
10 is double: true
10 runtimetype: int
3.1459 is int: false
3.1459 is double: true
3.1459 runtimetype: double
2 is int: true
2 is double: true
2 runtimetype: int

1 个答案:

答案 0 :(得分:2)

在浏览器中,intdouble之间无法区分。 JavaScript没有提供任何这样的区别,为此目的引入自定义类型会对性能产生很大影响,这就是为什么没有这样做。

因此,对于Web应用程序,最好坚持使用num

您可以使用例如:

来检查值是否为整数
var val = 1.0;
print(val is int);

打印true

这仅表示小数部分是0

在浏览器中没有附加到该值的类型信息,因此is intis double似乎只是检查该数字是否存在小数部分,并根据该数据来决定。