1.对象展开运算符
假设我们知道一个对象里面有方法,但是不知道方法里面的参数情况
function hls(...arg){
console.log(arg[0])
console.log(arg[1])
console.log(arg[2])
console.log(arg[3])
}
hls(1,2,3,4,5,6)
所以我们可以利用对象展开运算符查看参数
下面我们看一个例子:
let arr1=["123","456","789"]
let arr2=arr1 //arr1的内存空间映射到了arr2
console.log(arr2)
arr2.push("110")
console.log(arr1)
我们会发现,arr2的修改影响到了arr1,这不是我们要的结果
接着我们使用对象展开运算符
let arr1=["123","456","789"]
let arr2=[...arr1]
console.log(arr2)
arr2.push("110")
console.log(arr2)
console.log(arr1)
我们发现,arr2的修改不会影响到arr1
记住:
- 我们这里赋值的是里面的每一个值
- 它相当于里面的每一个元素
- 只要有…,就是里面的元素,而不是我们的arr对象
说明了arr2的修改不会影响到arr1,这解决了业务逻辑上的error
接下来我们看看rest运算符
2.rest运算符
rest:剩余部分的意识
也就是通过这个运算符,我们可以得知剩余参数的情况,比如剩余参数的个数,剩余参数是什么
我们先来看看剩余参数的个数
function hello(first,...args){
console.log(args.length)
}
hello(1,2,3,4,5,6,7,8)
第一个参数first是确定的,后面不确定的,我们通过剩余运算符可以发现,还剩下7个。
如果我们不止要查个数,我们要查参数具体是什么,那么我们可以使用for循环,遍历输出一下。
function hello(first,...args){
for(let i = 0; i < args.length; i++){
console.log(args[i])
}
}
hello(1,2,3,4,5,6,7,8)
上面的for循环里面,虽然我们使用了let,但是我们同时也为i开辟了空间,这会影响到内存和效率,于是,我们可以使用let of来对代码进行改进。
function hello(first,...args){
for(let val of args){
console.log(val)
}
}
hello(1,2,3,4,5,6,7,8)
它的输出结果和前面是一样的