-
Notifications
You must be signed in to change notification settings - Fork 25
Simple Expressions
Alexander Nemish edited this page Aug 13, 2013
·
12 revisions
val a = 12
val b = -a + 3
val c = b == 9
translates to
var a = 12
var b = -a + 3
var c = b == 9
javascript {
include("var a = 5;")
}
literally includes its argument
var a = 5;
In Scala if
and match
are expressions when in javascript those are statements. JScala correctly translates if/match
expressions to Javascript statements in case of val/var
definitions:
val a = 5
val b = if (a > 2) 1 else 2
val c = b match {
case 1 => true
case _ => false
}
translates to
var a = 5;;
var b;
if (a > 2) b = 1; else b = 2;
var c;
switch(b) {
case 1: c = true; break;
default: c = false; break;
}
val a = Array(1, 2)
for (i <- 0 until a.length) {
console.log(a(i))
}
for (j <- a) console.log(i)
translates to
var a = [1, 2];
for (var i = 0; i < a.length; i++) console.log(a[i]);
for (j in a) console.log(j);
try { parseInt("one") } catch {
case e: Exception => console.log("Oops")
}
translates to
try {
parseInt("one");
catch(e) console.log("Oops");
val a = "test".asInstanceOf[JString].charCodeAt(0)
val b = "test".as[JString].charCodeAt(0)
will produce
var a = "test".charCodeAt(0);
var b = "test".charCodeAt(0);
Scala Array
and all Seq
factories are translated into Javascript array literals:
val a = Array(1, 2)
val b = JArray(1, 2)
val c = Seq(1, 2)
val d = ArrayBuffer(1, 2)
d(0) = a(1)
b.push(c.length)
translates to
var a = [1, 2];
var b = [1, 2];
var c = [1, 2];
var d = [1, 2];
d[0] = a[1];
b.push(c.length);
Class JArray
implements Javascript Array
interface.
Scala anonymous classes that extend AnyRef are translated into Javascript objects:
val a = new {
val filed = 1
def foo(n: String) = parseInt(n)
}
translates to
var a = {
field : 1,
foo: function(n) {
return parseInt(n);
}
}
You can define a JsDynamic
object and call whatever you want on it.
val $ = new JsDynamic {}
class XmlHttpRequest(s: String) extends JsDynamic
javascript {
val a = new XmlHttpRequest("request")
a.foo("reply")
$("button", this).click(() => $("p").css("color", "red"))
$.field = $.select
}
translates to
var a = new XmlHttpRequest("request");
a.foo("reply");
$("button", this).click((function () {
$("p").css("color", "red");
}));
$.field = $.select;