函數的參數傳遞和對象深淺拷貝

代碼輸出

引用類型:對象,數組,函數,正則表達式
非引用類型:數值,字符串,布爾值,undefined,null。
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);//false,因為obj1和obj2指向不同的地址
console.log(obj1 = obj2);//{1,2}賦值的返回值是變量的值而不是true,之所以返回{1,2}是因為obj2把引用復制給了obj1,指向同一個對象。
console.log(obj1 == obj2);//true,因為二者的地址相同

代碼輸出(變量賦值)

var a = 1
var b = 2
var c = { name: '饑人谷', age: 2 }
var d = [a, b, c]

var aa = a
var bb = b
var cc = c
var dd = d

a = 11
b = 22
c.name = 'hello'
d[2]['age'] = 3

console.log(aa) //輸出1,因為基本類型賦值后兩個變量相互獨立,a隨然改成了11,但aa不受影響。
console.log(bb) //輸出2,理由同上。
console.log(cc)//輸出{name:'hello',age:2},引用類型賦值,只是地址的復制,一個變量改變,另一個也變化,所以c.name改成了‘hello’,cc也跟著變
console.log(dd)//輸出[11,22,{name:'hello',age:3}]數組也是引用類型,所以理由同上,最后一個通過數組索引把age改成了3。

代碼輸出(函數傳參)

var a = 1
var c = { name: 'jirengu', age: 2 }

function f1(n){
++n
}
function f2(obj){
++obj.age
}

f1(a)
f2(c)
f1(c.age)
console.log(a) //輸出1,基本類型傳值,a和n并不互相影響,只是a的值復制給了n而已。
console.log(c)//輸出{name:'jirengu',age:3}引用類型,是地址的復制,一個變量變化,另一個也會變化。

代碼輸出(過濾一個數組,在原數組上操作)

var arr=[3,1,0,-1,-3,2,-5]
function filter(arr){
  for(i=0;i<arr.length;i++){
    if(arr[i]<=0){
      arr.splice(i,1);
      i--;//因為刪除了一個元素,索引值也要刪除1。
}
}
}
filter(arr);
console.log(arr);

過濾數組,生成新的數組,只保留正數

var arr=[3,1,0,-1,-3,2,-5]
function filter(arr){
    var newArr=[];
    for(i=0;i<arr.length;i++){
      if(arr[i]>0){
          newArr.push(arr[i]);
}
}return newArr;
}
var arr2=filter(arr)
console.log(arr2)
console.log(arr)

用了兩種方法實現深拷貝

var obj={
  age:100;
  friend:{
      name:'sarah';
      sex:"male";
}
}
function copy(obj){
    var newobj = JSON.parse(JSON.stringify(obj));
    return newobj;
    }
    var obj2 = copy(obj1)
    console.log(obj2)

function copy (obj){
    var newobj={}
    for (var key in obj){
      if (obj.hasOwnProperty(key)){
      if(typeof obj[key]==='number'||typeof obj[key]==='boolean'||typeof obj[key]==='string'||obj[key]===undefined||obj[key]===null){
          newobj[key]=obj[key]
}else{
    newobj[key]=copy(obj[key])
}
}
}return newobj
}
var obj2 = copy(obj)
 console.log(obj2)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.引用類型有哪些?非引用類型有哪些2.如下代碼輸出什么?為什么? var obj1 = {a:1, b:2}; ...
    Rising_suns閱讀 259評論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 引用類型: 對象 object 數組 函數 正則非引用類型...
    怎么昵稱閱讀 258評論 0 0
  • 引用類型有哪些?非引用類型有哪些?非引用類型有number、string、boolean、undefined、nu...
    畢子歌閱讀 254評論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 非引用類型值,即基本類型值(數值,布爾值,undefined,null):指...
    LINPENGISTHEONE閱讀 220評論 0 0
  • 引用類型有哪些?非引用類型有哪些? JS中的數據類型分為基本類型和引用類型。基本類型:數值(number)、字符串...
    LeeoZz閱讀 275評論 0 0