- CoffeeScript 教程
- CoffeeScript - 首页
- CoffeeScript - 概述
- CoffeeScript - 环境
- CoffeeScript - 命令行工具
- CoffeeScript - 语法
- CoffeeScript - 数据类型
- CoffeeScript - 变量
- CoffeeScript - 运算符和别名
- CoffeeScript - 条件语句
- CoffeeScript - 循环
- CoffeeScript - 推导式
- CoffeeScript - 函数
- CoffeeScript 面向对象
- CoffeeScript - 字符串
- CoffeeScript - 数组
- CoffeeScript - 对象
- CoffeeScript - 范围
- CoffeeScript - 展开符
- CoffeeScript - 日期
- CoffeeScript - 数学
- CoffeeScript - 异常处理
- CoffeeScript - 正则表达式
- CoffeeScript - 类和继承
- CoffeeScript 高级
- CoffeeScript - Ajax
- CoffeeScript - jQuery
- CoffeeScript - MongoDB
- CoffeeScript - SQLite
- CoffeeScript 有用资源
- CoffeeScript - 快速指南
- CoffeeScript - 有用资源
- CoffeeScript - 讨论
CoffeeScript - 范围
在上一章中,我们已经看到了 CoffeeScript 中的数组,在编程过程中,我们会遇到一些需要在数组中存储一系列数值的情况,如下所示。
numbers =[1,2,3,4,5,6,7,8,9,10]
CoffeeScript 提供了一种更简洁的方式来表达包含一系列数值的数组,称为 **范围**。CoffeeScript 的此功能受到 Ruby 的启发。
语法
范围由两个数值创建,即范围的第一个和最后一个位置,用 .. 或 ... 分隔。用两个点 (1..4),范围是包含的 (1, 2, 3, 4);用三个点 (1...4),范围不包括结束 (1, 2, 3)。
以下是 CoffeeScript 中范围的语法。我们将像数组一样在方括号 **[ ]** 中定义范围内的值。在范围内,存储一系列数值时,无需提供整个序列的值,只需指定其 **开始** 和 **结束** 值,并用两个点 (**..**) 分隔,如下所示。
range =[Begin..End]
示例
以下是在 CoffeeScript 中使用范围的示例。将此代码保存在名为 **ranges_example.coffee** 的文件中。
numbers =[0..9] console.log "The contents of the range are: "+ numbers
打开 **命令提示符** 并编译 .coffee 文件,如下所示。
c:\> coffee -c ranges_example.coffee
编译后,它会生成以下 JavaScript 代码。在这里,您可以观察到范围被转换为完整的 CoffeeScript 数组。
// Generated by CoffeeScript 1.10.0 (function() { var numbers; numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; console.log("The contents of the range are:: " + numbers); }).call(this);
现在,再次打开 **命令提示符** 并运行 CoffeeScript 文件,如下所示。
c:\> coffee ranges_example.coffee
执行后,CoffeeScript 文件会生成以下输出。
The contents of the range are:: 0,1,2,3,4,5,6,7,8,9
排除结束值
范围被编译成包含所有数字的完整数组。如果我们想排除 **结束** 值,则必须使用三个点 (**...**) 分隔范围的 **开始** 和 **结束** 元素,如下所示。
range =[Begin...End]
示例
我们可以通过排除 **结束** 值来重写上述示例,如下所示。将以下内容保存到名为 **range_excluding_end.coffee** 的文件中
numbers =[0...9] console.log "The contents of the range are:: "+ numbers
打开 **命令提示符** 并编译 .coffee 文件,如下所示。
c:\> coffee -c ranges_example.coffee
编译后,它会生成以下 JavaScript 代码。
// Generated by CoffeeScript 1.10.0 (function() { var numbers; numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8]; console.log("The contents of the range are:: " + numbers); }).call(this);
现在,再次打开 **命令提示符** 并运行 CoffeeScript 文件,如下所示。
c:\> coffee ranges_example.coffee
执行后,CoffeeScript 文件会生成以下输出。在这里,您可以观察到结束值 **9** 被排除了。
The contents of the range are:: 0,1,2,3,4,5,6,7,8
将范围与变量一起使用
我们还可以通过将开始值和结束值分配给变量来定义范围。
示例
考虑以下示例。在这里,我们使用变量定义了一个范围。将此代码保存在名为 **range_variables.coffee** 的文件中
start=0 end=9 numbers =[start..end] console.log "The contents of the range are: "+ numbers
打开 **命令提示符** 并编译 .coffee 文件,如下所示。
c:\> coffee -c range_variables.coffee
编译后,它会生成以下 JavaScript 代码。
// Generated by CoffeeScript 1.10.0 (function() { var end, i, numbers, results, start; start = 0; end = 9; numbers = (function() { results = []; for (var i = start; start <= end ? i <= end : i >= end; start <= end ? i++ : i--) { results.push(i); } return results; }).apply(this); console.log("The contents of the range are:: " + numbers); }).call(this);
现在,再次打开 **命令提示符** 并运行 CoffeeScript 文件,如下所示。
c:\> coffee range_variables.coffee
执行后,CoffeeScript 文件会生成以下输出。在这里,您可以观察到结束值 **9** 被排除了。
The contents of the range are:: 0,1,2,3,4,5,6,7,8,9
带有数组的范围
我们可以使用范围来切片数组。每当我们在数组(变量)之后立即指定范围时,CoffeeScript 编译器就会将其转换为 JavaScript 的 **slice()** 方法调用。
假设我们有一个包含数值的数组,例如 0 到 9,那么我们可以检索其前 4 个元素,如下所示。
num = [1, 2, 3, 4, 5, 6, 7, 8, 9] data = num[0..5]
负值表示从末尾开始的元素,例如,-1 表示 9。如果我们指定一个负数 3 后跟两个点,则将提取数组的最后三个元素。
data = num[-3..]
如果我们在数组的范围内只指定两个点,如 **num[..]**,则将提取整个数组。我们还可以使用范围将数组段替换为其他元素,如下所示。
num[2..6] = [13,14,15,16,17]
示例
以下示例演示了将范围与数组一起使用的用法。将此代码保存在名为 **range_arrays.coffee** 的文件中
#slicing an array using ranges num = [1, 2, 3, 4, 5, 6, 7, 8, 9] data = num[0..5] console.log "The first four elements of the array : "+data #Using negative values data = num[-3..] console.log "The last 3 elements of the array : "+data #Extracting the whole array console.log "Total elements of the array : "+num[..] #Replacing the elements of an array num[2..6] = [13,14,15,16,17] console.log "New array : "+num
打开 **命令提示符** 并编译 .coffee 文件,如下所示。
c:\> coffee -c range_arrays.coffee
编译后,它会生成以下 JavaScript 代码。在这里,您可以观察到所有范围都被转换为 JavaScript 的 slice() 方法调用。
// Generated by CoffeeScript 1.10.0 (function() { var data, num, ref; num = [1, 2, 3, 4, 5, 6, 7, 8, 9]; data = num.slice(0, 6); console.log("The first four elements of the array : " + data); data = num.slice(-3); console.log("The last 3 elements of the array : " + data); console.log("Total elements of the array : " + num.slice(0)); [].splice.apply(num, [2, 5].concat(ref = [13, 14, 15, 16, 17])), ref; console.log("New array : " + num); }).call(this);
现在,再次打开 **命令提示符** 并运行 CoffeeScript 文件,如下所示。
c:\> coffee range_arrays.coffee
执行后,CoffeeScript 文件会生成以下输出。在这里,您可以观察到结束值 **9** 被排除了。
The first four elements of the array : 1,2,3,4,5,6 The last 3 elements of the array : 7,8,9 Total elements of the array : 1,2,3,4,5,6,7,8,9 New array : 1,2,13,14,15,16,17,8,9
带有字符串的范围
我们也可以将范围与字符串一起使用。如果我们在字符串之后指定范围,则 CoffeeScript 会对其进行切片并返回一个新的字符子集。
示例
以下示例演示了将范围与字符串一起使用的用法。在这里,我们创建了一个字符串并使用范围从中提取了一个子字符串。将此代码保存在名为 **ranges_with_strings.coffee** 的文件中
my_string = "Welcome to tutorialspoint" new_string = my_string[0..10] console.log new_string
打开 **命令提示符** 并编译 .coffee 文件,如下所示。
c:\> coffee -c ranges_with_strings.coffee
编译后,它会生成以下 JavaScript 代码。
// Generated by CoffeeScript 1.10.0 (function() { var my_string, new_string; my_string = "Welcome to tutorialspoint"; new_string = my_string.slice(0, 6); console.log(new_string); }).call(this);
现在,再次打开 **命令提示符** 并运行 CoffeeScript 文件,如下所示。
c:\> coffee ranges_with_strings.coffee
执行后,CoffeeScript 文件会生成以下输出。在这里,您可以观察到结束值 **9** 被排除了。
Welcome to
范围上的推导式
与对象和数组一样,我们还可以使用推导式迭代范围的元素。
示例
以下是使用范围上的推导式的示例。在这里,我们创建了一个范围并使用推导式检索其中的元素。将此代码保存在名为 **comprehensions_over_ranges.coffee** 的文件中
numbers =[0..9] console.log "The elements of the range are: " console.log num for num in numbers
打开 **命令提示符** 并编译 .coffee 文件,如下所示。
c:\> coffee -c comprehensions_over_ranges.coffee
编译后,它会生成以下 JavaScript 代码。
// Generated by CoffeeScript 1.10.0 (function() { var i, len, num, numbers; numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; console.log("The elements of the range are: "); for (i = 0, len = numbers.length; i < len; i++) { num = numbers[i]; console.log(num); } }).call(this);
现在,再次打开 **命令提示符** 并运行 CoffeeScript 文件,如下所示。
c:\> coffee comprehensions_over_ranges.coffee
执行后,CoffeeScript 文件会生成以下输出。在这里,您可以观察到结束值 **9** 被排除了。
The elements of the range are: 0 1 2 3 4 5 6 7 8
同样地,我们也可以使用推导式的 by 关键字更改此增量。
array = (num for num in [1..10] by 2) console.log array