JavaScript short-circuit evaluation通常用于例如处理浏览器不兼容问题:
var scrollPosition =
window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
在Scala.js中写这个的惯用方法是什么?
答案 0 :(得分:3)
相反@ gurghet的答案,IMO最惯用的版本是将JavaScript的惯用法直接用于Scala.js。毕竟,无论如何,你正在利用JavaScript的动态特性,所以你也可以明确它。您可以使用js.Dynamic
:
import scala.scalajs.js
import js.Dynamic.{global => g}
def scrollPosition: Double = {
import js.DynamicImplicits._ // to "write JavaScript"
val pos = g.window.pageYOffset || g.document.documentElement.scrollTop || g.document.body.scrollTop || 0
pos.asInstanceOf[Double]
}
答案 1 :(得分:1)
我认为你最好不要考虑常规scala。
特别是,如果你依赖于0的强制转换为布尔值,这是一种不好的做法,不是本身,而是因为你尽可能少地依赖隐式转换,最好是当它不改变语义类型时
我会以更具表现力的方式重写你的作业
var scrollPosition =
if (window.pageYoffset > 0) {
window.pageYoffset
} else if (document.documentElement.scrollTop > 0) {
document.documentElement.scrollTop
} else if (document.body.scrollTop > 0) {
document.body.scrollTop
} else {
0
}
我可以通过匹配案例或赋予意义使其更具表现力 中间步骤。