深度拷贝

实现深度拷贝功能:

深度拷贝功能

其中,有几点注意事项:

1、数组和对象的遍历方式:对象的遍历方式 for in 也适用于数组,因为数组也是特殊的对象。

2、如何判断对象、数组。

对象判断:typeof。可以判断六种基本数据类型:Number、String、Boolean、Object、Function、Undefined。可见其不能判断数组。

数组判断有以下几种方法:

(1) instanceof:主要用来判断某个实例是否属于某个对象。

        origin instanceof Array 返回Boolean类型。

(2) constructor: 对象的构造函数属性。

      origin.constructor == Array 

以上两种方法存在一个小问题:跨框架页面中的数组,在不同的框架中创建的数组不会相互共享其prototype属性。

(3)Object.prototype.toString:每一个继承 Object 的对象都有 toString方法,如果 toString 方法没有重写的话,会返回 [Object type],其中 type 为对象的类型。虽然Array也继承自Object,但js在Array.prototype上重写了toString,而我们通过toString.call(arr)实际上是通过原型链调用了。

      Object.prototype.toString.call(arr);//"[object Array]"  通过call指定arr数组为Object.prototype对象中的toString方法的上下文

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近在做项目的时候遇到了JS对象地址指向的问题,需求是某个页面是通过一个对象构建出来的,但是在关闭这个窗口的时候会...
    超人有点忙阅读 275评论 0 0
  • 如何判断数组类型 typeof ❌对Array不起作用,会将结果判断为object,同理null instance...
    糕糕AA阅读 228评论 0 0
  • 1.对象只有一层是,可以使用es6的对象扩展var obj = {a: 123}var obj1 = {...ob...
    细雨衔雪阅读 486评论 0 0
  • 要进行深度克隆,首先就需要知道进行克隆的这个变量是什么类型的值,知道了是什么类型的,我们才能分门别类的去根本不同的...
    无缺啊阅读 332评论 0 0
  • 一般不会深拷贝函数等,所以一般用递归和JSON方法即可。 如果要实现函数等拷贝,比较完美的做法: function...
    Gen_阅读 912评论 0 0