我试图确定某个函数的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
答案 0 :(得分:2)
在浏览器中,int
和double
之间无法区分。
JavaScript没有提供任何这样的区别,为此目的引入自定义类型会对性能产生很大影响,这就是为什么没有这样做。
因此,对于Web应用程序,最好坚持使用num
。
您可以使用例如:
来检查值是否为整数var val = 1.0;
print(val is int);
打印true
这仅表示小数部分是0
。
在浏览器中没有附加到该值的类型信息,因此is int
和is double
似乎只是检查该数字是否存在小数部分,并根据该数据来决定。