我正在查看Screen
类(包org.scalajs.dom.raw
)并注意到以下属性:
def width: Double = js.native
def availHeight: Double = js.native
def height: Double = js.native
使用Double
代替Int
是否有任何理由?我不熟悉Scala.js代码,但对我来说使用Int
会更有意义。
我在这里缺少什么?
答案 0 :(得分:6)
有时,似乎总是整数的东西实际上可以采用非整数值,正如@Bob Dalgleish所解释的那样。
还有一些情况是使用Double
,因为值可能大于2 ^ 31。虽然是整个值,但它们超出了Int
的范围,必须键入Double
(Long
是不透明的,因此,不是JS数字的有效表示。)
但是,很多时候Scala.js外观类型(特别是对于DOM)使用Double
只是因为它们是从TypeScript类型定义转换而来的,它只有number
个。 Double
是保守的近似值。在这些情况下,在验证原始规范(通常在Web IDL中)之后,我们可以将其缩小到Int
(PR欢迎,并附带Web IDL规范的链接)。
您提到的Screen
属性的具体情况属于最后一类。从the original IDL可以看出,这些值被描述为“long
”。在IDL中,a long
is an integer in the range [-2^31, 2^31-1],这正是Scala.js中Int
的范围。