一、==和===的区别是什么
==是抽象相等运算符,而===是严格相等运算符
==运算符是在进行必要的类型转换后,再比较。
===运算符不会进行类型转换,所以如果两个值不是相同的类型,会直接返回false
二、判断变量类型
1.typeof()用来判断简单的数据;
2.判断变量是对象还是数组用instanceof(可以正确判断对象的类型),
constructor或者object.prototupe.toString.call()
三、闭包
闭包:有权访问另一个作用域中变量的函数
特性:可实现函数外访问函数
闭包的应用场景
ajax请求成功的回调
一个事件绑定的回调方法
setTimeout的延时回调
一个函数内部返回另一个匿名函数
闭包的优缺点
优点:让代码更加规范、简洁
缺点:使用闭包过多,内存消耗大,造成内存的泄露
四、原型和原型链
每个对象都会在其内部初始化一个属性,就是prototype(原型),
当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,
那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,
于是就这样一直找下去,也就是我们平时所说的原型链的概念。
每个对象有一个私有属性,记作[[prototype]],属性又有自己的prototype,形成了原型链
五、深拷贝和浅拷贝
浅拷贝:创建一个新对象,将原对象的属性值赋值给新对象; object.assign,展开符
深拷贝:拷贝一个对象的全部属性,拷贝完成之后,两个对象相互不影响 json.parse
使用json拷贝的缺点:
1.会忽略undefined
2.会忽略Symbol
3.不能序列化函数
4.不能拷贝循环引用对象
5.不能正确调用new Date()
6.不能处理正则
六、js的基本数据类型
undefined,Null,Boolean,Number,String,Symbol,
七、谈谈对this对象的理解
his总是指向函数的直接调用者(而非间接调用者);如果有new关键字,this指向new出来的那个对象;
在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window。
八、javascript如何实现继承?
(1)构造继承
(2)原型继承
(3)实例继承
(4)拷贝继承