CoffeeScript系列教程(八)—运算符


为了体现高大上,CoffeeScript重新给JavaScript的运算符起了别名,更加语义化。

is

相当于JavaScript中的===,看例子

#编译前
s = 2

doSomething() if s is 3      


#编译后
var s;

s = 2;

if (s === 3) {
  doSomething();
}

注意:如果在CoffeeScript当中使用===就会报错,因为===不是它的运算符,无法编译

isnt

相当于JavaScript当中的!==,看例子

#编译前
s = 2

doSomething() if s isnt 3      


#编译后
var s;

s = 2;

if (s !== 3) {
  doSomething();
}

注意:同样的,在CoffeeScript当中不能使用!==,编译会报错

看了上面两个例子,有人就会问了,如果想在CoffeeScript当中使用JavaScript的==和!=怎么办?不好意思,使用不了,对于CoffeeScript来说,JavaScript当中的==和!=并不是真正的比较,因为它会将操作数进行类型转换。前辈们不是也老教导我们,在JavaScript当中不要使用==和!=来比较数据,要使用===和!==

有人又说了,如果我在CoffeeScript当中使用==和!=会怎么样?看例子

#编译前
s = 2

doSomething() if s == 3      

doSomething() if s != 3



#编译后
var s;

s = 2;

if (s === 3) {
  doSomething();
}

if (s !== 3) {
  doSomething();
}

CoffeeScript屏蔽了JavaScript当中不友好的语法设计,使我们的代码看起来更加语义化,明确化。

not

相当于JavaScript当中的!,看例子

#编译前
flag = true

doSomething() if not flag      

doSomething() if !flag      


#编译后
var flag;

flag = true;

if (!flag) {
  doSomething();
}

if (!flag) {
  doSomething();
}

!在CoffeeScript当中也可以正常使用哦。

and

相当于JavaScript当中的&&,看例子

#编译前
flag = true
certain = false

doSomething() if flag and certain      

doSomething() if flag && certain      


 #编译后
var certain, flag;

flag = true;

certain = false;

if (flag && certain) {
  doSomething();
}

if (flag && certain) {
  doSomething();
}

&&在CoffeeScript当中也可以正常使用哦。

or

相当于JavaScript当中的||

#编译前
flag = true
certain = false

doSomething() if flag or certain      

doSomething() if flag || certain      


#编译后
var certain, flag;

flag = true;

certain = false;

if (flag || certain) {
  doSomething();
}

if (flag || certain) {
  doSomething();
}

||在CoffeeScript当中也可以正常使用哦。

true, yes, on

都相当于JavaScript当中的true

#编译前
doSomething() if true      

doSomething() if yes      

doSomething() if on      


#编译后
if (true) {
  doSomething();
}

if (true) {
  doSomething();
}

if (true) {
  doSomething();
}

false, no, off

都相当于JavaScript当中的false

#编译前
doSomething() if false      

doSomething() if on      

doSomething() if off


#编译后
if (false) {
  doSomething();
}

if (true) {
  doSomething();
}

if (false) {
  doSomething();
}     

@, this

相当于JavaScript当中的this

#编译前
Student = (name, age) ->
  @name = name
  @age = age

Student = (name, age)->
  this.name = name
  this.age = age


#编译后
var Student;

Student = function(name, age) {
  this.name = name;
  return this.age = age;      
};

Student = function(name, age) {
  this.name = name;
  return this.age = age;
};

this在CoffeeScript当中也可以正常使用哦。

of

相当于JavaScript当中的in,在循环和推导式那章中,我们知道了of是用来遍历对象的,在JavaScript当中也是用in来遍历对象的,看个JavaScript例子

var obj = {
    name: 'xxx',
    age: '10'
}

for (var key in obj) {
    console.log(obj[key]);
}

大家只要记住,在CoffeeScript当中,遍历数组的时候使用in,遍历对象的时候使用of。

#编译前
array = ['xxx', 'yyy', 'zzz']

console.log i + ':' + item for item,i in array


obj =
  name: 'xxx'
  age: 10

console.log key + ':' + value for key,value of obj

#编译后
var array, i, item, key, obj, value, _i, _len;

array = ['xxx', 'yyy', 'zzz'];

for (i = _i = 0, _len = array.length; _i < _len; i = ++_i) {
  item = array[i];
  console.log(i + ':' + item);
}

obj = {
  name: 'xxx',
  age: 10
};

for (key in obj) {
  value = obj[key];
  console.log(key + ':' + value);
}

in

同JavaScript的in。

a ** b

相当于JavaScript当中的Math.pow(a, b),求a的b次方。

#编译前
s = 2**3

b = 4**6


#编译后
var b, s;

s = Math.pow(2, 3);

b = Math.pow(4, 6);

a // b

相当于JavaScript当中的Math.floor(a / b),两数相处,商向下取整。

#编译前
s = 3//2 #s=1

b = 8//3 #b=2


#编译后
var b, s;

s = Math.floor(3 / 2);

b = Math.floor(8 / 3);

a %% b

相当于JavaScript当中的(a % b + b) % b,负数求模。
看到数学就蛋疼,大家自行搜索啊!

除了==和!=编译后会不同外,其它的JavaScript运算符在CoffeeScript当中也可以使用,且语义不变。如+ – * /等等

有任何问题,欢迎大家批评指出,我们共同进步。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>