GraphQL matlotlib image object datagridview uiviewcontroller Plupload vue版本 vue router 微信小游戏开发视频 jquery拼接字符串 mysql小数用什么类型 hbase集群搭建 flutter 缺点 python连接mysql mysql事务 python功能 java中基本数据类型 java基本数据结构 java如何使用 java线程停止 简体中文语言包 易语言进度条 路由器有辐射吗 begininvoke 中维高清监控系统安装 js验证码 电脑待机费电吗 pro换肤 虚拟声卡驱动 神牧属性 复仇之矛天赋 videoview 软碟通u盘装系统教程 c4dr20 删除mysql服务 手机下载微博客户端 origin怎么画图 js随机数 urlpattern
当前位置: 首页 > 学习教程  > 编程语言

深拷贝,数据类型,原型

2021/1/13 20:27:30 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

数据类型校验 数据类型分为基本类型和引用类型: 基本类型:String、Number、Boolean、Null、Undefined、symbol(ES6) 引用类型:Object、Array、Date、Function、Error、RegExp、Math、Number、String、Boolean、Glob…

数据类型校验

数据类型分为基本类型和引用类型:

基本类型:String、Number、Boolean、Null、Undefined、symbol(ES6)

引用类型:Object、Array、Date、Function、Error、RegExp、Math、Number、String、Boolean、Globle。

js内置类型有七种:String、Number、Boolean、Null、Undefined、Symbol(ES6)、Object

typeof

​ 基本数据类型 number,string,Boolean,undefined,null,symbol

instanceof 返回值是一个布尔值

(主要用于引用数据类型的判断)引用数据类型:array,object
判断两个对象是否属于实例对象,一般用法为 A instanceof B

constructor

利用实例化对象的constructor属性指向构造函数

对象可以通过_proto_在其所属类的原型上找到这个属性

一般用法为 A.constructor
constructor是prototype对象上的属性,指向构造函数。根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的。

console.log(new Number(123).constructor)
//ƒ Number() { [native code] }

object.prototype.toString.call()

toString
所有数据类型的父类都是Object, toString为Object的原型prototype的方法,返回格式为[object xxx],其中Object对象返回的是[Object object],其他类型需通过call/apply来调用

深浅拷贝

使用深拷贝是在改变新的数组或者对象的时候不改变原数组或对象的值

深拷贝主要是将另一个对象的属性值拷贝过来之后,另一个对象的属性值并不受到影响,因为此时它自己在堆中开辟了自己的内存区域,不受外界干扰。
浅拷贝主要拷贝的是对象的引用值,当改变对象的值,另一个对象的值也会发生变化。

深拷贝方法:for…in 循坏递归,JSON.parse(JSON.string(obj))
        let arr=[1,2,3,4,{name:11}]
        // let newarr=arr
        
        // console.log(arr,newarr);
        let newarr={...arr} //深拷贝
        arr[0]=222
        console.log(arr,newarr);
浅拷贝方法:
  • slice()
  • concat()
  • Object.assign(target, …sources)
  • {…obj} 和 […arr]
  • 循坏push
        //浅拷贝
        let arr=[1,2,3,4,{name:11}]
        let newarr=arr
        arr[0]=222
        console.log(arr,newarr);

原型和原型链

原型

JavaScript 的所有对象中都包含了一个 [proto] 内部属性,这个属性所对应的就是自身的原型

JavaScript 的函数对象,除了原型 [proto] 之外,还有 prototype 属性,当函数对象作为构造函数创建实例时,该 prototype 属性值将被作为实例对象的原型
** constructor**
每个prototype原型都有一个constructor属性,指向它关联的构造函数。

原型链

当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到则直接使用。如果没有则去原型的原型中寻找,直到找到Object对象的原型,Object对象的原型没有原型,如果在Object原型中依然没有找到,则返回undefined。
在这里插入图片描述
递归实现深拷贝
将要拷贝的数据 obj 以参数的形式传参
声明一个变量 来储存我们拷贝出来的内容
判断 obj 是否是引用类型数据,如果不是,则直接赋值即可( 可以利用 obj instanceof Type 来进行判断),
由于用 instanceof 判断array 是否是object的时候,返回值为true, 所以我们在判断的时候,直接判断obj 是否是Array 就可避免这个问题
根据判断的不同类型,再给之前的变量赋予不同的类型: [ ] : { }
循环obj 中的每一项,如果里面还有复杂数据类型,则直接利用递归再次调用copy函数
最后 将 这个变量 return 出来即可


本文链接: http://www.dtmao.cc/news_show_600316.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?