CoffeeScript - 运算符和别名
CoffeeScript 运算符
运算符是一个符号,它告诉编译器执行特定的数学或逻辑函数。让我们来看一个简单的表达式4 + 5 等于 9。 这里 4 和 5 称为操作数,'+' 称为运算符。
CoffeeScript 提供的运算符与 JavaScript 中的运算符相同,但存在一些差异。 JavaScript 中存在一些有问题的运算符。 CoffeeScript 要么删除了它们,要么修改了它们的功能,还引入了一些新的运算符。
以下是 CoffeeScript 支持的运算符列表。
- 算术运算符
- 比较运算符
- 逻辑(或关系)运算符
- 赋值运算符
CoffeeScript 别名
除了运算符,CoffeeScript 还提供了别名。 CoffeeScript 为各种运算符和符号提供别名,以使您的 CoffeeScript 代码更易读且更友好。
让我们一一了解CoffeeScript的所有运算符和别名。
算术运算符
CoffeeScript 支持以下算术运算符。 假设变量A 的值为10,变量B 的值为20,则 −
S.No | 运算符和说明 | 示例 |
---|---|---|
1 | + (加法) 添加两个操作数 |
A + B = 30 |
2 | − (减法) 从第一个操作数中减去第二个操作数 |
A - B = -10 |
3 | * (乘法) 将两个操作数相乘 |
A * B = 200 |
4 | / (除法) 分子除以分母 |
B / A = 2 |
5 | % (模数) 输出整数除法的余数 |
B % A = 0 |
6 | ++(递增) 将整数值增加一 |
A++ = 11 |
7 | -- (递减) 将整数值减一 |
A-- = 9 |
比较运算符
JavaScript 支持以下比较运算符。 假设变量A 的值为10,变量B 的值为20,则 −
S.No | 运算符和说明 | 示例 |
---|---|---|
1 | = = (等于) 检查两个操作数的值是否相等,如果相等,则条件成立。 |
(A == B) is not true. |
2 | != (不等于) 检查两个操作数的值是否相等,如果值不相等,则条件为真。 |
(A != B) is true. |
3 | > (大于) 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 |
(A > B) is not true. |
4 | < (小于) 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 |
(A < B) is true. |
5 | >= (大于或等于) 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 |
(A >= B) is not true. |
6 | <= (小于或等于) 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 |
(A <= B) is true. |
下表显示了一些比较运算符的别名。 假设 A 包含 20 并且变量 B 包含 20。
运算符 | 别名 | 示例 |
---|---|---|
= = (等于) | is | A is B gives you true. |
!= = (不等于) | isnt | A isnt B gives you false. |
逻辑运算符
CoffeeScript 支持以下逻辑运算符。 假设变量A 的值为10,变量B 的值为20,则 −
S.No | 运算符和说明 | 示例 |
---|---|---|
1 | && (逻辑与) 如果两个操作数都非零,则条件为真。 |
(A && B) is true. |
2 | || (逻辑或) 如果两个操作数中的任何一个不为零,则条件为真。 |
(A || B) is true. |
3 | ! (逻辑非) 反转其操作数的逻辑状态。 如果条件为真,则逻辑非运算符将使它为假。 |
! (A && B) is false. |
下表显示了一些逻辑运算符的别名。 假设变量 X 持有 true 和变量 Y 持有 false。
运算符 | 别名 | 示例 |
---|---|---|
&& (逻辑与) | and | X and Y gives you false |
|| (逻辑或) | or | X or Y gives you true |
! (逻辑非) | not | not X gives you false |
位运算符
CoffeeScript 支持以下位运算符。 假设变量A包含2,变量B包含3,则 −
S.No | 运算符及说明 | 示例 |
---|---|---|
1 | & (按位与) 它对其整数参数的每一位执行布尔与运算。 |
(A & B) is 2. |
2 | | (按位或) 它对其整数参数的每一位执行布尔或运算。 |
(A | B) is 3. |
3 | ^ (按位异或) 它对其整数参数的每一位执行布尔异或运算。 异或表示操作数一为真或操作数二为真,但不能同时为真。 |
(A ^ B) is 1. |
4 | ~ (按位非) 它是一个一元运算符,通过反转操作数中的所有位来进行运算。 |
(~B) is -4. |
5 | << (左移) 它将第一个操作数中的所有位向左移动第二个操作数中指定的位数。 新位用零填充。 将一个值左移一位相当于乘以 2,左移两位相当于乘以 4,依此类推。 |
(A << 1) is 4. |
6 | >> (右移) 二进制右移运算符。 左操作数的值向右移动右操作数指定的位数。 |
(A >> 1) is 1. |
赋值运算符
CoffeeScript 支持以下赋值运算符 −
S.No | 运算符和说明 | 示例 |
---|---|---|
1 | = (简单赋值) 将右侧操作数的值赋给左侧操作数 |
C = A + B 会将 A + B 的值赋值给 C |
2 | += (添加和赋值) 它将右操作数与左操作数相加,并将结果赋给左操作数。 |
C += A 等同于 C = C + A |
3 | -= (减法和赋值) 它从左操作数中减去右操作数,并将结果赋给左操作数。 |
C -= A 等同于 C = C - A |
4 | *= (乘法和赋值) 它将右操作数与左操作数相乘,并将结果赋给左操作数。 |
C *= A 等同于 C = C * A |
5 | /= (除法和赋值) 它将左操作数与右操作数相除,并将结果赋值给左操作数。 |
C /= A 等同于 C = C / A |
6 | %= (取模和赋值) 它使用两个操作数取模并将结果分配给左操作数。 |
C %= A 等同于 C = C % A |
注意 − 相同的逻辑适用于按位运算符,因此它们将变得像 <<=, >>=, >>=, &=, |= 和 ^=。
CoffeeScript 中的相等运算符
在使用 JavaScript 时,您会遇到两种类型的相等运算符 == 和 ===。
JavaScript 中的== 运算符是类型强制,即如果一个运算中的两个操作数的类型不同,则转换其中一个运算符的数据类型 进入其他,然后将两者进行比较。
CoffeeScript 避免了这种不受欢迎的强制转换,它将 == 运算符编译为 JavaScript 的严格比较运算符 ===。
如果我们使用 === 比较两个操作数,那么它返回 true,只有它们的值和数据类型都相等,否则它返回 false b>.
示例
考虑以下示例。 这里我们有两个变量 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
存在操作符
CoffeeScript 提供了一种称为存在运算符的新运算符来验证变量是否存在。 它由 ? 表示。 除非变量为 null 或未定义,否则存在运算符返回 true。
示例
下面给出了存在运算符的示例。 这里我们有三个变量,即 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
注意 − 我们有存在运算符 ? 的访问器变体。 我们可以用它代替 . 运算符找出空引用。
链式比较
与在 Python 中一样,我们可以在 CoffeeScript 的单个表达式中使用一系列比较运算符。
示例
以下是使用链式比较的示例。
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
注意 − CoffeeScript 移除了三元运算符; 我们可以使用 inline if 语句代替它。
CoffeeScript 别名
一般来说,CoffeeScript 为各种运算符和符号提供别名,以使您的 CoffeeScript 代码更易读且对用户更友好。 以下是 CoffeeScript 提供的别名。
名称 | 运算符/符号 | 别名 |
---|---|---|
"等于"运算符 | == | is |
"不等于"运算符 | !== | isnt |
"非"运算符 | ! | not |
"与"操作符 | && | and |
"或"运算符 | || | or |
布尔值 true | true | true, yes, on |
布尔值 false | false | off, no |
当前对象 | this | @ |
换行(或)分号 | \n or ; | then |
if 的逆运算 | ! if | unless |
测试数组是否存在 | in | |
测试对象是否存在 | of | |
求幂 | a**b | |
整数除法 | a//b |
示例
下面的例子展示了如何在 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