Coffeescript 简明教程
CoffeeScript - Operators and Aliases
CoffeeScript Operators
运算符是一个符号,告诉编译器执行特定的数学或逻辑函数。让我们来看一个简单的表达式 4 + 5 is equal to 9 。此处 4 和 5 称为 operands ,而 “+” 称为 operator 。
CoffeeScript 提供的运算符与 JavaScript 中的运算符相同,但有一些区别。在 JavaScript 中有一些有问题的运算符。CoffeeScript 或者移除了它们,或者修改了它们的功能,并且还引入了一些新的运算符。
以下是 CoffeeScript 支持的运算符列表。
-
Arithmetic Operators
-
Comparison Operators
-
Logical (or Relational) Operators
-
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 |
>= (Greater than or Equal to) 检查左操作数是否大于或等于右操作数,如果是,那么该条件为真。 |
(A >= B) 不为真。 |
6 |
⇐ (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 |
&& (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 |
& (Bitwise AND) 它对整数参数中的每个位执行布尔 AND 运算。 |
(A & B) 为 2。 |
2 |
* |
(按位 OR) |
(A |
B) is 3. |
3 |
^ (Bitwise XOR) 在整数参数的每一个位上执行布尔异或运算。异或意味着操作数一是真或操作数二是真,但不能两者同时为真。 |
(A ^ B) 为 1。 |
4 |
~ (Bitwise Not) 为一元运算符,通过反转操作数的所有位来运行。 |
(~B) is -4. |
5 |
<< (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
考虑以下示例。这里我们有两个变量 a 和 b 。 a 持有整数类型的值 21, b 持有相同的值,但它属于 string 类型。在 CoffeeScript 中,当我们比较 a 和 b 时,结果将为 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, age 和 subject ,我们正在使用存在操作符来验证变量 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