引用类型改变值的问题

var arr1 = "Marry".split('');
var arr2 = arr1.reverse();
var arr3 = "Blues".split('');
arr2.push(arr3);
console.log(arr1);//[ 'y', 'r', 'r', 'a', 'M', [ 'B', 'l', 'u', 'e', 's' ] ]
console.log(arr2);//[ 'y', 'r', 'r', 'a', 'M', [ 'B', 'l', 'u', 'e', 's' ] ]
console.log(arr1.slice(-1));//['B','l','u','e','s']

arr1和变量arr2指向堆上的同一块内存区域,无论是通过arr1还是arr2的引用改变了堆上变量的值,最终两个变量所指向的引用的值都会发生改变。

slice方法

是对array中的一段做浅复制。首先复制array[star],一直复制到array[end]为止。end的参数是可选的。默认是该数组的长度。如果参数中的任何一个是负数,array.length会和他们相加,试图让他们变成非负数。如果start大于等于array.length,得到的结果将是一个新的空数组。

splice(start,deleteCount,item..)
splice方法从数组中移除一个或者多个元素,并用新的的item替换他们。参数start是从数组array中移除元素的开始位置。参数deleteCount是要移除的元素的个数。如果有额外的参数 ,那些item会被插入到被移除的元素的位置上。它返回一个被移除元素的数组。

var a = ['a','b','c'];
var r = a.splice(1,1,'ache','bug');
console.log(a);//['a','ache','bug','c']
console.log(r);//['b']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值