美文网首页
数据类型2

数据类型2

作者: 栗子daisy | 来源:发表于2020-09-27 21:00 被阅读0次
    值类型 引用类型
    基本类型:字符串(string)、数值(number)、布尔值(boolean)、undefined、null 、symbol 对象(Object)、数组(Array)、函数(Function)
    占用空间固定,保存在栈中 占用空间不固定,保存在堆中
    保存与复制 值本身 指向对象的一个指针
    检测类型 toString.call()
    typeof()
    toString.call()
    instanceof
    使用new()方法构造出的对象是引用型

    -“Object.prototype.toString.call()”可以简写为“toString.call()” toString方法将数据由其他的形态转换成string形态(除了null和undefined),所以我们可以利用该特性做类型检测。
    Object.prototype.toString.call("hello");//[object String]

    • typeof 能判断类型有:number、string、boolean、symbol、undefined、function; object、array、null 的变量都返回 object
    • instanceof用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例arr instanceof Array//true
    • Array 为 js 的原生对象,它有一个静态方法:Array.isArray(),能判断参数是否为数组

    浅拷贝 深拷贝
    首先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级,深拷贝后两个对象互不影响。

    浅拷贝的方式
    • 直接赋值 :B=A , 纯粹的浅拷贝, B的任何变化都会反映在A上。
    • ES6:Object.assign(target,source)只实现第一层“深拷贝”,深层还是浅拷贝。除第一层外B的变化都会反映在A上。
    • lodash: _clone()
    深拷贝方式
    • lodash: _.cloneDeep()
    • 递归:使用递归进行深拷贝时比较灵活,但是代码较为复杂;
    function deepCopy(A,B) {
        for(item in A){
            if(typeof item=="object"){
                deepCopy(item,B[item]);
            } else {  B[item]=A[item];  }
        } }
    deepCopy(A,B);
    B.data.num=5;
    console.log(A.data.num);    //10,A中属性值并没有改变,说明是深拷贝
    
    • JSON.parse()和JSON.stringify
      var B=JSON.parse(JSON.stringify(A));
      JSON对象:JSON对象方法实现深拷贝时比较简单,但是当拷贝对象包含方法时,方法无法序列成字符串会被丢失;

    相关文章

      网友评论

          本文标题:数据类型2

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