美文网首页
引用类型对象拷贝思考

引用类型对象拷贝思考

作者: 王翔爱摇滚乐爱电影爱心理学爱哲 | 来源:发表于2017-08-24 16:15 被阅读0次

1、引用类型有哪些?非引用类型有哪些

非引用类型 String 类型、Null 类型、Number 类型、Undefined类型、Boolean 类型
引用类型(Object、Array、Function、正则):指的是那些保存在堆内存中的对象,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象

2、

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
//false,由于obj1与obj2所储存的位置不同,所以false。
console.log(obj1 = obj2);
//obj2赋值给obj1 输出 Object { a=1,  b=2} 内容。
console.log(obj1 == obj2);
//把obj2赋值给obj1,所以obj2与obj1存储的位置是一样的,所以为true。

3、

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,因为 var aa = a
console.log(bb) 
//输出 2 都是值传递,aa、a、bb、b都会开辟一个块属于自己的栈空间
console.log(cc)
//{name:'hello',age:3} 对象的赋值是引用传递,cc和c都是指向同一块堆内存。
console.log(dd)
//[1,2,{name:'hello',age:3}] 数组的赋值也是引用传递

4、

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

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

f1(a) 
//a = 1 ,会默认执行赋值动作,var n = a,属于值传递,++n时,a依旧保持原始值不变的。
f2(c) 
//c = {name:'jirengu',age:3}
//会默认执行var obj = c
//这时候它们都是指向同一块堆内存,当执行++obj.age时,对象c的age属性加一
f1(c.age) 
//取出c.age = 3 默认执行var n = 3.不会影响c.age
console.log(a) 
//1
console.log(c)
//{name:'jirengu',age:3}

5、过滤如下数组,只保留正数,直接在原数组上操作

var arr = [3,1,0,-1,-3,2,-5];
function filter(arr) {
    for(var i=0;i<arr.length;i++){
        if(arr[i]<=0){
            arr.splice(i,1);  //意义就是,第几位小于0 就删除这个数
            filter(arr);
        }
    }
}
filter(arr);
console.log(arr);//[3, 1, 2]

6、过滤如下数组,只保留正数,原数组不变,生成新数组

var arr = [3,1,0,-1,-3,2,-5]
function filter(array){
    return array.filter(function (argument) {
        return argument > 0
    })
}
var arr2 = filter(arr)
console.log(arr2)//[3, 1, 2]
console.log(arr)//[3, 1, 0, -1, -3, 2, -5]

相关文章

  • Java深拷贝和浅拷贝

    定义 浅拷贝 基本数据类型 拷贝数值 引用类型 拷贝对象引用 深拷贝 基本数据类型 拷贝数值 引用类型 拷贝引用所...

  • 引用类型对象拷贝思考

    1、引用类型有哪些?非引用类型有哪些 非引用类型 String 类型、Null 类型、Number 类型、Unde...

  • 15.深浅拷贝

    浅拷贝:就是当被拷贝的对象的某个属性值为引用类型时,拷贝的对象会将被拷贝的对象的这个属性的引用的地址拷贝过来,这样...

  • 深拷贝和浅拷贝

    浅拷贝就比如像引用类型,而深拷贝就比如值类型。浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不...

  • 引用类型对象拷贝

    一.引用类型有哪些?非引用类型有哪些引用类型有对象、数组、函数、正则表达式非引用类型:数值、布尔值、null、un...

  • 引用类型对象拷贝

    1.引用类型有哪些?非引用类型有哪些 数据类型分为两类,即基本数据类型和引用类型,其中基本数据类型包括5样,num...

  • 引用类型对象拷贝

    引用类型有哪些?非引用类型有哪些 引用类型对象、数组、函数、正则非引用类型所有的基本类型:数值、字符串、布尔值、n...

  • 引用类型对象拷贝

    引用类型有哪些?非引用类型有哪些 引用类型值(对象、数组、函数、正则():指的是那些保存在堆内存中的对象,变量中保...

  • 引用类型对象拷贝

    1.引用类型有哪些?非引用类型有哪些 (1)引用类型包括:对象,数组,函数,正则。指的是那些保存在堆内存中的对象,...

  • 引用类型对象拷贝

    引用类型有哪些?非引用类型有哪些 引用类型值(对象、数组、函数、正则):指的是那些保存在堆内存中的对象,变量中保存...

网友评论

      本文标题:引用类型对象拷贝思考

      本文链接:https://www.haomeiwen.com/subject/gndedxtx.html