1.原型链:
原型链指的是原型对象创建过程的历史记录,当访问一个对象中某个属性时,会先去该对象的本身属性上去查找,如果没有找到则去该对象的_proto_隐式原型上查找,也就是该构造函数的prototype,如果没有找到,则去该构造函数的prototype的_proto_上查找,这样一层一层向上查找就会形成一个链式结构。
每个对象都有默认属性prototype,其中包括constructor和_proto_,constructor指的是该对象的类型,_proto_指的是该对象的原型。
2.js的数据类型:
基本数据类型:string,number,boolean,undefined,null
引用数据类型:array,function,object
检测数据类型的方法:
1)typeof :该方法只能检测基本数据类型,但typeof null的结果是object
2) instanceof:该方法只能检测通过new关键字去创建的数据类型
3)constructor:该方法同typeof一样,只能检测基本数据类型
4)Object.prototype.toString.call():能检测所有数据类型
3. script标签中两个属性async和defer的区别:
async属性表示后续文档的加载和渲染和js脚本的加载和执行是并行执行的,而defer属性表示后续文档的加载和js脚本的加载是并行执行的,但js脚本的执行要等到文档中所有元素都被解析完成后才能进行。
4.重排和重绘
重排或回流(reflow):当dom变化影响了元素的几何信息,浏览器需要重新计算元素的几何属性,并将其安放在界面中正确的位置,页面重新布局,重新排列元素。
重绘:元素的外观样式发生了改变,但不影响页面布局,将修改元素外观样式的过程就做重绘。
如何触发重排和重绘?
1)增加、删除、更新dom结点
2)使用display:none隐藏dom结点,触发重排和重绘
3)使用visibility:hidden隐藏dom结点,触发重绘
4)给dom结点增加动画
5)添加一个样式表,调整样式属性
6)用户行为,比如:调整窗口大小、字号大小,滚动页面等