Arrays args和args[…]是否相同?
我正在阅读,被下面这句话弄糊涂了:Arrays args和args[…]是否相同?,arrays,coffeescript,Arrays,Coffeescript,我正在阅读,被下面这句话弄糊涂了: args=args[…] 那行是做什么的?来自: 带范围的阵列切片和拼接 范围还可用于提取数组的切片。有两个点(3..6),范围包括在内(3,4,5,6);有三个点(3…6),范围不包括末端(3,4,5)。切片索引具有有用的默认值。省略的第一个索引默认为零,省略的第二个索引默认为数组的大小 所以说array[…]是以下意思的简写: len = array.length array[0 .. len] 这仅仅是数组的一个浅拷贝。这意味着args=args[…]
args=args[…]
那行是做什么的?来自:
带范围的阵列切片和拼接
范围还可用于提取数组的切片。有两个点(3..6),范围包括在内(3,4,5,6
);有三个点(3…6
),范围不包括末端(3,4,5
)。切片索引具有有用的默认值。省略的第一个索引默认为零,省略的第二个索引默认为数组的大小
所以说array[…]
是以下意思的简写:
len = array.length
array[0 .. len]
这仅仅是数组的一个浅拷贝。这意味着args=args[…]
只需创建args
的本地浅层副本,这样args
就可以在不改变传入的原始数组的情况下进行操作和更改,并且您可以存储对数组的引用,而函数的调用者不会通过传入的原始args
引用意外地改变数组传递给函数
考虑这个简化的例子:
f = (args) -> args = args[..]
这就是JavaScript:
var f;
f = function(args) {
return args = args.slice(0);
};
以及:
返回数组部分的浅层副本。
[…]
如果省略end
,则切片提取到序列的末尾
所以说array.slice(n)
返回一个array
的浅拷贝,从索引n
开始,一直到array
的末尾,由于数组的索引从零开始,array.slice(0)
生成整个数组的浅拷贝。
带范围的阵列切片和拼接
范围还可用于提取数组的切片。有两个点(3..6),范围包括在内(3,4,5,6
);有三个点(3…6
),范围不包括末端(3,4,5
)。切片索引具有有用的默认值。省略的第一个索引默认为零,省略的第二个索引默认为数组的大小
所以说array[…]
是以下意思的简写:
len = array.length
array[0 .. len]
这仅仅是数组的一个浅拷贝。这意味着args=args[…]
只需创建args
的本地浅层副本,这样args
就可以在不改变传入的原始数组的情况下进行操作和更改,并且您可以存储对数组的引用,而函数的调用者不会通过传入的原始args
引用意外地改变数组传递给函数
考虑这个简化的例子:
f = (args) -> args = args[..]
这就是JavaScript:
var f;
f = function(args) {
return args = args.slice(0);
};
以及:
返回数组部分的浅层副本。
[…]
如果省略end
,则切片提取到序列的末尾
所以说array.slice(n)
返回一个array
的浅拷贝,从索引n
开始,一直到array
的末尾,由于数组的索引从零开始,array.slice(0)
生成整个数组的浅拷贝