js高级-DAY04
一、今日学习内容
1.数据类型分类
基本数据类型number、string、boolean、undefined、null、symbol(独一无二的值)、bigInt(科学计算)
引用数据类型array、function、object
2.数据类型的内存分配
基本数据类型保存在栈中
引用数据类型保存在堆中,栈中存放它的地址,指向堆中的数据
3.变量的复制
基本数据类型传递的是值的拷贝
引用数据类型传递的是地址的拷贝
4.参数的传递
基本数据类型传递的是值的拷贝
引用数据类型传递的是地址的拷贝
5.深浅拷贝
5.1浅拷贝
特点:只拷贝一层
直接obj1=obj,obj和obj1指向一个地址,共享数据,相互影响
实现方法:(1)展开与算符
(2)for...in
const obj1 = {};
(3)Object.assign();
5.2深拷贝(1)JSON.parse(JSON.stringify(obj));
缺点:有些情况不能成功拷贝;例如:
un: undefined, //没有了
show: function () { },//没有了
reg: /\.css$/,//空对象
int: Infinity,//null
fin: -Infinity,//null
date: new Date(),//字符串
null: null
(2)完美拷贝:引入lodash,const obj1 = _.cloneDeep(obj);
(3)手写深拷贝tartget.hasOwnProperty(key)===判断对象属性是否在原型链
把函数处理成字符串:funciton.toString()
把转成字符串的函数生成一个新的函数:let newfun = eval("(" + funstr + ")")
步骤:
1.封装方法===(获取数据类型的方法)(获取是否是数组、对象、方法)
2.遍历===封装深拷贝
(1)判断类型{}/[ ]
(2)循环要拷贝的目标
6.变量类型检测
基本数据类型typeof()---检测null(object)、【】(object)
引用数据类型instanceof()
语法:变量/ (实例对象) instanceof 构造函数
特点:变量的原型链上找得到后面的构造函数,就会但会true ,否则返回false
Object.prototype.toString。call( )
准确检测数据类型【object 构造函数】
7.继承ES5:寄生组合式继承
例如:静态方法---方法挂载在构造函数上,实例对象不能调用
Person.say = function () {
return '说话'
}
继承父类所有原型:Programmer.prototype = Object.create(Person.prototype);
此时子类构造函数会丢失,需要找回子类原型的构造函数
Programmer.prototype.constructor = Programmer;
|