我正在研究Screen类(包org.scalajs.dom.raw)并注意到以下属性:
def width: Double = js.native
def availHeight: Double = js.native
def height: Double = js.native
Run Code Online (Sandbox Code Playgroud)
是否有任何理由使用Double而不是Int?我不熟悉Scala.js代码,但对我来说使用它会更有意义Int.
我在这里错过了什么?
有时,似乎总是整数的东西实际上可以采用非整数值,正如@Bob Dalgleish所解释的那样.
还Double存在使用a的情况,因为值可以大于2 ^ 31.尽管是整个值,但它们超出了范围Int并且必须键入为Double(Long不透明,因此,不是JS数字的有效表示).
但是,很多时候Scala.js外观类型(特别是对于DOM)使用Doubles只是因为它们是从只有numbers的TypeScript类型定义中翻译出来的.Double是保守的近似.在这些情况下,在验证原始规范(通常在Web IDL中)之后,我们可以将其缩小为Int(PR欢迎,并附带Web IDL规范的链接).
Screen您提到的属性的具体情况属于最后一类.从原始IDL中可以看出,这些值被描述为long"s".在IDL中,a long是[-2 ^Int 31,2 ^ 31-1]范围内的整数,它恰好是Scala.js中的一个范围.