美文网首页
引用类型和对象拷贝练习

引用类型和对象拷贝练习

作者: 头大如牛 | 来源:发表于2017-12-13 00:01 被阅读0次
  1. 引用类型有哪些?非引用类型有哪些

引用类型有对象,数组,函数,正则

非引用类型有数值,布尔,null,undefined

  1. 如下代码输出什么?为什么
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);  //false,obj1和obj2是两个不同的对象,指向两个不同的地址
console.log(obj1 = obj2);   //{a:1, b:2}; 赋值语句将obj2的值赋值给obj1并输出赋值后的obj1的值
console.log(obj1 == obj2);  //true ,因为上一句已经将obj2赋值给obj1,obj1指向与obj2相同的地址
  1. 如下代码输出什么? 为什么
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为非引用类型,所以a的值为1时,赋值给aa 开辟新的内存空间,后面改变的是a的值,不影响aa
console.log(bb) //  2 理由同上
console.log(cc) // { name: 'hello', age: 3 }
console.log(dd) //  { name: '饥人谷', age: 3 } c和d都是引用类型,赋值时会使指针指向同一个地址,所以后面改变的相同内存区域的数据
  1. 如下代码输出什么? 为什么
var a = 1
var c = { name: 'jirengu', age: 2 }

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

f1(a) //    会默认执行var n = a;属于值传递,++n时,a不变
f2(c) //    会默认执行var obj = c;这时会指向同一块内存区域,所以原内存区域属性进行修改时,c也会修改 即obj.age为3
f1(c.age) // c.age值为2,相当于f1(2),相当于执行var n=2;
console.log(a) //1
console.log(c)  //  { name: 'jirengu', age: 3 }
  1. 过滤如下数组,只保留正数,直接在原数组上操作
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)
            i--;//  删除了一个元素,索引减一
        }
    }
}
filter(arr)
console.log(arr) // [3,1,2]
  1. 过滤如下数组,只保留正数,原数组不变,生成新数组
var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if(arr[i] > 0) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr)  // [3,1,0,-1,-2,2,-5]
  1. 写一个深拷贝函数,用两种方式实现
// 声明一个对象
var objTest = {
    name: Lucifer;
    age: 23;
    skills:{
        html,
        css,
        javascript
    }
}
//  方法一
function deepCopy(obj) {
    var newObj={};
    for(var key in obj) {
        if(typeof obj[key] === 'object' && obj[key] !== null) {
            newObj[key] = deepCopy(obj[key]);
        }else {
            newObj[key] = oldObj[key];
        }
    }
    return newObj;
}
var objCopy = deepCopy(objTest);
console.log(objCopy);
//  方法二
function deepCopy(obj) {
    var newObj = JSON.parse(JSON.stringify(obj));
    return newObj;
}
var objCopy = deepCopy(objTest);
console.log(objCopy);

相关文章

  • 引用类型和对象拷贝练习

    引用类型有哪些?非引用类型有哪些 引用类型有对象,数组,函数,正则 非引用类型有数值,布尔,null,undefi...

  • Java深拷贝和浅拷贝

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

  • 深拷贝和浅拷贝

    深拷贝和浅拷贝主要是针对对象的属性是对象(引用类型) 一、基本类型和引用类型的区别1、先了解内存任何编程语言的内存...

  • 引用类型和对象拷贝

    1.引用类型有哪些?非引用类型有哪些 引用类型:对象、数组、函数、正则表达式,指保存在堆内存中的对象,变量中保存的...

  • 引用类型和对象拷贝

    1.引用类型有哪些?非引用类型有哪些? 数值、字符串、布尔值、null和undefined为基本类型值,这些都是保...

  • 引用类型和对象拷贝

    引用类型:Array,Function,Object,Regex.指的是那些保存在堆内存中的对象,变量中保存的实际...

  • 引用类型和对象拷贝

    引用类型有哪些?非引用类型? 基本类型Number、String、Boolean、Null、Undefined 引...

  • 引用类型和对象拷贝

    引用类型有哪些?非引用类型有哪些2.如下代码输出什么?为什么 引用类型有对象、数组、函数、正则,非引用类型有数值、...

  • 引用类型和对象拷贝

    一、引用类型有哪些?非引用类型有哪些 JS 中分基本类型和引用类型。 基本类型值(数值、布尔值、字符串、null和...

  • 引用类型和对象拷贝

    1. 引用类型有哪些,非引用类型有哪些? 基本类型(非引用类型):Number, String, Boolean,...

网友评论

      本文标题:引用类型和对象拷贝练习

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