### 數組賦值時傳的是值還是址?(答案是址)
賦值形式:
~~~
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、訪問格式