在 Scala.JS 中是否有调用我 运行 所在的平台?

In Scala.JS is there a call to get the platform I'm running on?

我有一些 Scala 代码用于我为 JVM 和 ScalaJS 编译的库。

现在我有一个 "pure" 项目,在 js 和 jvm 项目中没有特殊代码,由于 intellij 集成和其他一些因素,我想保持这种状态。

但是,我确实有一小部分代码(1-2 行)需要根据我是在 JVM 还是 JS 中进行更改。我想要一个简单的方法来完成这个不需要我改变我的整个项目结构。

基本上我想要一个电话 "isJS" 如果我在 JavaScript 则 returns 为真,否则为假。

没有任何标准,因为它需要扩展 JVM 上可用的 API,而 Scala.js 做不到。

您可以使用 object Platformjs/jvm/ 子项目中使用两个不同的实现轻松地自行构建它。例如对于 JS 它将是:

object Platform {
  final val isJS = true
  final val isJVM = false
}

当然要非纯。您还可以在一个仅提供该功能的小型库中对其进行抽象。例如,catalystsplatform 项目就是这样做的。

如果你想保持完全的纯粹和没有依赖,你必须诉诸黑客:

val isJS = 1.0.toString == "1"

这是可行的,因为在 JVM 上,1.0.toString returns "1.0",但在 JS 上它 returns "1".

你可以这样做:

val isJS = System.getProperty("java.vm.name") == "Scala.js"