1原型链
2.数据类型、数据判断
类型:Number、String、Boolean、null、underfined、Object(引用数据类型)、symbol
数据判断:
typeof:一般用来判断基本类型判断,null判断类型为Object,array、object都属于object
instanceof:一般用来检测对象类型,以及继承关系
Object.prototype.toString.call,这个相对于来说比较安全,但是返回的为数组,需要做处理
3.new的时候发生了什么
1.创建一个空对象,将它的引用赋值给this,继承函数的原型
2.通过this将属性和方法添加至这个对象
3.最后返回this指向的新对象,也就是实例。
4、bind、call、apply
```
var obj={
name:"liu",
myAge:this.age,
myFun:function(){
console.log(this); // this指向obj
console.log(this.name+";"+this.age)
}
}
```
相同点:都是为了改变this的指向
不同点:1.bind是返回的一个函数需要调用
例如:obj.myFun.bind(arg)()
2.穿参不一样
apply:obj.myFun.apply(arg,[1,2,3,4]) //传参是数组
call:obj.myFun.cal(arg,1,2,3,4) //传参是字符串
bind:obj.myFun.bind(arg,1,2,3,4)() //传参跟call一致
5.this指向的问题
1.当一个函数并非对象的属性的时候,这时候this指向全局对象
2.函数作为属性的时候this指向对象,比如:o.myfun(),特殊情况:var b= o.myfn b() 这时候指向this,因为b是全局变量
3.构造函数调用,当用new关键字,返回的是一个对象,this指向的就是那个返回的对象;如果返回的不是对象,this还是指向函数的实例,虽然null属于对象,但是返回null依然指向函数实例
4.构造函数new 后面带不带括号的区别,不带括号优先级会低于.(ps:调用对象),加上()优先级提升就不会报错了。new Parent.num代码相当于new (Parent.num);new Parent().num相当于(new Parent()).num
6.闭包(内部函数可以访问其所在的外部函数中声明的参数和变量)
MDN上面修改文字大小尺寸的
function makeSizer(size) {
return function() {
document.body.style.fontSize = size + 'px';
};
}
var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);
7事件循环
宏任务和微任务
宏任务:setTImeout、setInterval、setImmediate、i/o、UI render、script 整体代码
微任务:process.nextTick、promise、async/await(其实就是promise)、mutaionObserver
整体执行:执行宏任务,然后执行红任务产生的微任务,一直到微任务执行结束,结束之后再回到宏任务进行下一轮循环
8手写 Promise
9安全问题
1.xss跨站脚本攻击远离,原因:过于信赖客户端提交的数据,没有进行加密处理。处理办法: 只要是客户端提交的数据就应该进行相应的数据过滤。
2.csrf跨站请求伪造原理:原因:网页登陆之后,在没有关闭网页的情况下,收到别人的链接,这时候会利用客户端的cookie直接向服务器发送请求。
3.sql脚本注入原理,如何进行:利用现有程序,将sql命令注入到后台数据库引擎执行的能力,它可以通过web表单中输入恶意,sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到服务器执行恶意的sql命令。
其他
1.const 对象可以修改。原因:指向的指针是不可以修改的,但是指向指针的内容是可以修改的。
2.this指向,剪头函数是指向定义者,非箭头函数是指向调用者
3.es6新规范,object.assing、includes、find、object.keys等等