学习课程名称:直面JavaScript中的30个疑难杂症
章节名称:数据类型
讲师姓名:公明2020
课程内容
- type of 和instanceof 检测数据类型有哪些异同
- 带你深入理解数据的存储形式-堆栈
- 深浅拷贝有哪些方式
- 开发中,常见的数据类型转化有哪些坑
typeof 和 instanceof 都是用来判断变量类型,区别在于:
1、typeof判断所有变量的类型,返回值有number、string、boolean、function、object、undefined。
2、typeof对于丰富的对象实例,只能返回object,导致有时候得不到真实的数据类型。
3、instanceof用来判断对象,代码形式(obj1 instanceof obj2)(判断obj1是否为obj2的实例),obj2必须为对象,否则会报错。返回的是布尔值。
4、instanceof可以对不同的实例对象进行判断,判断方法是根据对象的原型链依次向下查询,如果obj2的原型属性存在于obj1的原型链上,(obj1 instanceof obj2)值为true。
堆
计算机为原始类型开辟的一块内存空间。原型类型有:string、number····
栈
计算机为引用类型开辟的一块内存空间。引用类型有:object
浅拷贝:拷贝基本数据类型时,不受任何影响,当拷贝引用类型时,源对象也会被修改。
- 直接赋值
- Object.assign
- ES6扩展运算符
- 数组的slice 和 concat 方法
- jQuery 中的 $.extend
说明:$.extend(deep,target,object1,object2,…) 通过这个方法就可以实现深浅拷贝。各个参数的说明如下:
deep:true 表示深拷贝,false 表示浅拷贝
target:要拷贝的目标对象
object1:待拷贝的对象
深拷贝:深拷贝就是完完全全拷贝一份新的对象,它会在内存的堆区域重新开辟空间,修改拷贝对象就不会影响到源对象。
- JSON.parse(JSON.stringify(待拷贝对象))
- jQuery 中的 $.extend
- 手写递归实现深拷贝