### 数组赋值时传的是值还是址?(答案是址)
赋值形式:
~~~
var a = 1;
var b = a;
b=2;
console.log(a); //a=1
console.log(b); // b=2
~~~
传址形式:
~~~
var a = [1,2];
var b = a;
b[2] = 3;
console.log(a); // a=[1,2,3]
console.log(b); // b=[1,2,3]
~~~
以下方式可以使数组传的是值而不是址:
~~~
方法一(推荐使用):用jQuery中的$.extend方法,该方法转化后数组可根据第二个参数类型变化,若为{},则为对象;若为[],则为数组
var a = [1,2];
var b = $.extend(true,{},a);
b[2] = 3;
var c = $.extend(true,[],a);
c[2] = 3;
console.log(a); // a=[1,2];a依然没改变
console.log(b); // b={0:1, 1:2, 2:3};此时b为对象
console.log(c); // c=[1,2,3];此时c为数组
~~~
~~~
方法二:用数组的concat方法,该方法转化后数组依然是数组形式
var a = [1,2];
var b = a.concat();
b[2] = 3;
console.log(a); //a=[1,2];a依然没改变
console.log(b); //b=[1,2,3];b为数组
~~~
~~~
方法三:数组的复制,不改变原数组
//slice()
var arr = [1,2];
var arr1 = arr.slice();
arr1[2] = 3;
console.log(arr); // arr=[1,2]
console.log(arr1); // arr1=[1,2,3]
//from()
var arr2 = Array.from(arr);
arr2[2] = 3;
console.log(arr); // arr=[1,2]
console.log(arr2); // arr2=[1,2,3]
//[...arr]
var arr3 = [...arr];
arr3[2] = 3;
console.log(arr); // arr=[1,2]
console.log(arr3); // arr3=[1,2,3]
~~~
## 深度克隆:
~~~
function clone(obj) {
var o, i, j, k;
if(typeof(obj) != "object" || obj === null) return obj;
if(obj instanceof(Array)) {
o = [];
i = 0;
j = obj.length;
for(; i < j; i++) {
if(typeof(obj[i]) == "object" && obj[i] != null) {
o[i] = arguments.callee(obj[i]);
} else {
o[i] = obj[i];
}
}
} else {
o = {};
for(i in obj) {
if(typeof(obj[i]) == "object" && obj[i] != null) {
o[i] = arguments.callee(obj[i]);
} else {
o[i] = obj[i];
}
}
}
return o;
}
~~~
- 我的烂笔头
- 1、常用功能方法整合
- 2、jQuery基本函数
- 3、在页面中添加图片
- 4、精度算法
- 5、图片懒加载
- 6、弹窗拖拽功能
- 7、弹幕功能
- 8、鼠标滚动事件
- 9、获取页面相关属性
- 10、弹窗的三种展现方式
- 11、轮播功能
- 12、获取唯一标识
- 13、CSS样式效果
- 14、任意两点的动态连线
- 15、全新接口功能
- 16、适配兼容
- 17、无刷新页面更改URL
- 18、定时器的那些事
- 19、关于iframe的常见问题
- 20、设置不同的时间
- 21、关于select-option
- 22、省市级联
- 23、省市级联数据
- 24、关于数据传输问题
- 25、问题分支
- 那些年我们一起走过的神坑
- 1、关于console的使用
- 2、关于数组
- 1、数组的赋值
- 2、数组的常用方法
- 3、关于移动端的bug
- 4、关于视频的bug
- 5、那些坑坑洼洼
- 6、关于字符串
- 1、字符串的常用方法
- 页面布局
- 1、背景固定的滚动页面
- 心得
- Node.js
- 1、安装环境
- ThinkPHP 5.1
- 1、访问格式