Coffeescript 简明教程

CoffeeScript - Operators and Aliases

CoffeeScript Operators

运算符是一个符号,告诉编译器执行特定的数学或逻辑函数。让我们来看一个简单的表达式 4 + 5 is equal to 9 。此处 4 和 5 称为 operands ,而 “+” 称为 operator

CoffeeScript 提供的运算符与 JavaScript 中的运算符相同,但有一些区别。在 JavaScript 中有一些有问题的运算符。CoffeeScript 或者移除了它们,或者修改了它们的功能,并且还引入了一些新的运算符。

以下是 CoffeeScript 支持的运算符列表。

  1. Arithmetic Operators

  2. Comparison Operators

  3. Logical (or Relational) Operators

  4. Assignment Operators

CoffeeScript Aliases

除了运算符外,CoffeeScript 还提供别名。CoffeeScript 为各种运算符和符号提供别名,以便使你的 CoffeeScript 代码具有可读性并且更加用户友好。

让我们逐个了解 CoffeeScript 的所有运算符和别名。

Arithmetic Operators

CoffeeScript 支持以下算术运算符。假设变量 A 保存 10 并且变量 B 保存 20 ,则 −

S.No

Operator and Description

Example

1

+ (Addition) Adds two operands

A + B = 30

2

− (Subtraction) 从第一个操作数中减去第二个操作数

A - B = -10

3

* (Multiplication) Multiply both operands

A * B = 200

4

/ (Division) 用分子除以分母

B / A = 2

5

% (Modulus) 输出整数除法的余数

B % A = 0

6

++ (Increment) 将一个整数值加一

A++ = 11

7

-- (Decrement) 将一个整数值减一

A-- = 9

Comparison Operators

JavaScript 支持以下比较运算符。假设变量 A 保存 10 并且变量 B 保存 20 ,则 −

S.No

Operator and Description

Example

1

= = (Equal) 检查两个操作数的值是否相等,如果相等则条件变为真。

(A == B) 不为真。

2

!= (Not Equal) 检查两个操作数的值是否相等,如果值不相等则条件变为真。

(A != B) 为真。

3

> (Greater than) 检查左操作数的值是否大于右操作数的值,如果大于则条件变为真。

(A > B) 不为真。

4

< (Less than) 检查左操作数的值是否小于右操作数的值,如果小于则条件变为真。

(A < B) 为真。

5

&gt;= (Greater than or Equal to) 检查左操作数是否大于或等于右操作数,如果是,那么该条件为真。

(A >= B) 不为真。

6

&#8656; (Less than or Equal to) 检查左操作数是否小于或等于右操作数,如果是,那么该条件为真。

(A ⇐ B) 为真。

下表显示了少数比较运算符的别名。假设 A 作用 20 ,变量 B 作用 20

Operator

Alias

Example

= = (Equal)

is

A is B 使你得到真。

!= = (Not Equal)

isnt

A isnt B 使你得到假。

Logical Operators

CoffeeScript 支持以下逻辑运算符。假设变量 A 作用 10 ,变量 B 作用 20 ,那么 −

S.No

Operator and Description

Example

1

&amp;&amp; (Logical AND) 如果两个操作数都是非零,那么该条件为真。

(A && B) 为真。

2

*

(逻辑 OR)*如果任意一个操作数是非零,那么该条件为真。

(A

B) is true.

3

! (Logical NOT) 逆转其操作数的逻辑状态。如果某个条件为真,那么逻辑 NOT 运算符将使它变为假。

下表显示了少数逻辑运算符的别名。假设 X 作用 true ,变量 Y 作用 false

Operator

Alias

Example

&& (Logical AND)

and

X and Y 使你得到假

(Logical OR)

or

X or Y 使你得到真

! (not x)

Bitwise Operators

CoffeeScript 支持以下逐位运算符。假设变量 A 作用 2 ,变量 B 作用 3 ,那么 −

S.No

Operator and Description

Example

1

&amp; (Bitwise AND) 它对整数参数中的每个位执行布尔 AND 运算。

(A & B) 为 2。

2

*

(按位 OR)在整数参数的每一个位上执行布尔 OR 运算。

(A

B) is 3.

3

^ (Bitwise XOR) 在整数参数的每一个位上执行布尔异或运算。异或意味着操作数一是真或操作数二是真,但不能两者同时为真。

(A ^ B) 为 1。

4

~ (Bitwise Not) 为一元运算符,通过反转操作数的所有位来运行。

(~B) is -4.

5

&lt;&lt; (Left Shift) 按在第二个操作数中指定的位置将第一个操作数中的全部位左移。新位都填充为零。将值左移一位等效于将其乘以 2,左移两位等效于乘以 4,以此类推。

(A << 1) 为 4。

6

Assignment Operators

Coffeescript 支持以下赋值运算符 -

S.No

Operator and Description

Example

1

= (Simple Assignment ) 将值从右侧操作数分配给左侧操作数

C = A + B 将分配 A + B 的值到 C

2

+= (Add and Assignment) 将右侧操作数加到左侧操作数,并将结果分配给左侧操作数。

C += A 等效于 C = C + A

3

-= (Subtract and Assignment) 将右侧操作数从左侧操作数中减去,并将结果分配给左侧操作数。

C -= A 等效于 C = C - A

4

*= (Multiply and Assignment) 将右侧操作数与左侧操作数相乘,并将结果分配给左侧操作数。

C *= A 等效于 C = C * A

5

/= (Divide and Assignment) 将左侧操作数除以右侧操作数,并将结果分配给左侧操作数。

C /= A 等效于 C = C / A

6

%= (Modules and Assignment) 使用两个操作数获取模,并将结果分配给左侧操作数。

C %= A 等效于 C = C % A

Note − 同样的逻辑适用于按位运算符,所以它们将变成 <⇐, >>=, >>=, &=, |= 和 ^=.

Equality Operator in CoffeeScript

在使用 JavaScript 时,将遇到两种类型的相等运算符 =====

JavaScript 中的 == 运算符为 type coercive ,即如果运算中两个操作数的类型不同,则一个操作数的数据类型将被转换为另一个并进行比较。

CoffeeScript 避免了这种不受欢迎的强制,将 == 运算符编译到 JavaScript 的严格比较操作符 === 中。

如果我们用 === 比较两个操作符,只有当它们的值和数据类型相同时,它才返回 true ,否则它返回 false

Example

考虑以下示例。这里我们有两个变量 aba 持有整数类型的值 21, b 持有相同的值,但它属于 string 类型。在 CoffeeScript 中,当我们比较 ab 时,结果将为 false 。(由于 CoffeeScript 的 == 操作符被转换为 JavaScript 的 === 操作符)

a=21
b="21"
result = 21=='21'
console.log result

编译时,上述 CoffeeScript 产生以下 JavaScript

// Generated by CoffeeScript 1.10.0
(function() {
  var a, b, result;

  a = 21;

  b = "21";

  result = a === b;
  console.log(result);
}).call(this);

执行时,它会产生以下输出。

false

The existential Operator

CoffeeScript 提供了一个称为存在操作符的新操作符来验证变量的存在。它由 ? 表示。除非变量为 null 或 undefined,否则存在操作符返回真。

Example

下面给出了存在操作符的一个示例。这里我们有三个变量,即 name, agesubject ,我们正在使用存在操作符来验证变量 name 和 phone 的存在。

name="Ramu"
age=24
subject="Engineering"
verify_name = name?
verify_phone = phone?
console.log verify_name
console.log verify_phone

编译时,这将生成以下 JavaScript 代码。

// Generated by CoffeeScript 1.10.0
(function() {
  var age, name, subject, verify_name, verify_phone;
  name = "Ramu";
  age = 24;

  subject = "Engineering";
  verify_name = name != null;
  verify_phone = typeof phone !== "undefined" && phone !== null;
  console.log(verify_name);
  console.log(verify_phone);

}).call(this);

如果我们执行上述 CoffeeScript 文件,它将产生以下输出。

true
false

Note − 我们有存在操作符的访问器变体 ? 。我们可以使用它来代替 . 操作符来找出空引用。

Chained Comparisons

像在 Python 中一样,我们可以在 CoffeeScript 中的单个表达式中使用一连串比较操作符。

Example

以下是使用链式比较的一个示例。

score = 70
passed = 100 > score > 40

console.log passed

编译时,示例 CoffeeScript 为您提供以下 JavaScript 代码。

// Generated by CoffeeScript 1.10.0
(function() {
  var passed, score;

  score = 70;

  passed = (100 > score && score > 40);

  console.log(passed);

}).call(this);

如果您执行上述 CoffeeScript 代码,它将产生以下输出。

true

Note − CoffeeScript 移除了三元操作符;相反,我们可以使用 inline if 语句。

CoffeeScript Aliases

通常,CoffeeScript 为各种操作符和符号提供别名,以使您的 CoffeeScript 代码可读且更易于用户使用。以下是 CoffeeScript 提供的别名。

Name

Operator / symbol

Aliases

"equals to" operator

==

is

"not equals to" operator

!==

isnt

"not" operator

!

not

"and" operator

&&

and

"or" operator

or

boolean value true

true

true, yes, on

boolean value false

false

off, no

current object

this

@

新行(或)分号

\n or ;

then

Inverse of if

! if

unless

测试数组是否存在

in

测试对象是否存在

of

Exponentiation

a****b

Integer division

a*//*b

dividend dependent modulo

Example

以下示例显示了如何在 CoffeeScript 中使用别名 -

a=21; b=21

x = true; y = false

console.log a is b

console.log a isnt b

console.log x and y

console.log x or y

console.log yes or no

console.log on or off

console.log a**b

console.log a//b

console.log a%%b

编译上述示例时,它会为您提供以下 JavaScript 代码。

// Generated by CoffeeScript 1.10.0
(function() {
  var a, b, x, y,
    modulo = function(a, b) { return (+a % (b = +b) + b) % b; };

  a = 21;

  b = 21;

  x = true;

  y = false;

  console.log(a === b);

  console.log(a !== b);

  console.log(x && y);

  console.log(x || y);

  console.log(true || false);

  console.log(true || false);

  console.log(Math.pow(a, b));

  console.log(Math.floor(a / b));

  console.log(modulo(a, b));

}).call(this);

如果你执行上面的 CoffeeScript 文件,它会生成以下输出 −

true
false
false
true
true
true
5.842587018385982e+27
1
0