(记住面试)undefined 与null关系
undefined继承null,所以undefined == null结果为true,但是null表示空对象,undefined表示未定义:
null与undefined用途不同,null可以用来表示一个空对象,但是没有必要把-个变量的值显式设置为undefined。
(重点)一个等号,两个等号,三个等号
一个等号:赋值。
两个等号:比较,智慧比较等号两边的值,不会数据类型,自动转换。
三个等号:必须达到完全相等,先去比较数据类型,如果数据类型一致,再去比较值。
函数
1创建
1.1 var关键字创建
var fun1 = function(){
}
调用fun1()
箭头函数()=>{}
1.2直接创建一个函数
function name(形参){
// 局部作用域
处理逻辑交互
如果需要返回值return,没有就算了
}
name(实参)
(经典面试)基本数据类型和引用数据类型在内存如何存储
1.基本数据类型
var a = 100
var b=a;
a = 200
在执行后 b=100 a=200,因为他的值保存在栈内
2.引用数据类型(对象数组函数)
var obj ={
name'zhangsan',
age:20
}
var obj1={name:'zhangsan', age:'30'}
var obj2=obj1;
obj1.name='lisi'
执行后 obj1{name:'lisi',age:'30'},obj2{name:'lisi',age:'30'}
因为是浅拷贝,只拷贝地址,他俩的值的在堆内存地址是一样的,obj2={...obj1}就可以解决一样的问题
深拷贝与浅拷贝
主要针对于引用数据类型参数说的,浅拷贝表示仅拷贝引用地址,深拷贝表示对于对象的克隆。
深拷贝的方法
通过json对象实现深拷贝(JSON.stringify,JSON.parse)
Object.assign()拷贝
lodash函数库实现深拷贝
递归的方式实现深拷贝