1、typeof可以判断哪些变量类型
答:number、string、boolean、undefind四种值类型,还有对象、数组、函数三种引用类型。只能区分值类型,引用类型只能区分函数。
2、===与==的使用条件
答:通常情况下都使用===,只有当if判断if(obj.a==null){}(jq源码的判断相当于同时判断了obj.a===null||obj.a===undefind)。
3、js中有哪些内置对象
答:object、Array、number、boolean、string、function、date、regexp、error
4、js变量按照存储方式区分为哪些类型,描述其特点
答:a.值类型,一个值占存储一个存储区块
b.引用类型,几个相同值公用一个存储区块儿,赋值给新对象只是相当于指针指向当前对象。
5、如何判断一个函数是否是一个变量的构造函数
答:instanceof。
6、5个原型规则(非面试题)
答:a.所有的引用类型(对象、数组、函数),都有对象特性,即可自由扩展属性(null除外)。
b.所有的引用类型,都有一个_proto_(隐式原型)属性,属性值是一个普通的对象。
C.所有的引用类型,都有一个prototype(显式原型)属性,属性值是一个普通的对象。
d.所有的引用类型,_proto_的属性值指向他的构造函数的prototype的值。
e.当试图得到一个引用类型的一个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即他的构造函数的prototype)中寻找
7. 如何准确判断一个变量是数组类型?
答:instanceof.
8. 写一个原型链继承的例子?
答:function Elem(id){
this.ele=document.getElementById(id);
}
Ele.prototype.html=function(val){
Var ele=this.ele;
if(val){
ele.innerHtml=val;
}
Return this;
}
Ele.prototype.on=function(type,fn){
Var ele=this.ele;
ele.addEventListenner(type,fn);
Return this;
}
Var div1=new Ele(“div1”);
div1.html(“<p>好好学习,天天向上<p>”).on(“click”,function(){
Alert(“好好学习天天向上”);
})
9、this的执行环境
答:a.作为构造函数执行;
b.作为对象属性执行;
C.作为普通函数执行;
D.call,apply,bind等;
10、同步和异步的区别是什么,分别举一个例子;
答:同步会阻塞程序运行,异步不会;alert是同步,定时是异步。
11、前端使用异步的场景有哪些?
答:a.定时:setTimeout、setInterval;
B.网络请求:ajax。Img加载;
C.事件绑定。
12、从输入url到得到html的详细过程?
答:a.页面加载资源的形式(1)输入url,加载html;(2)加载html里边的静态资源;
b.加载一个资源的过程(1)浏览器根据DNS服务器得到域名的ip地址;(2)向这个ip的机器发送http请求;(3)服务器收到、处理并返回http请求;(4)浏览器收到返回内容;
c.浏览器渲染页面的过程(1)根据html结构生成Dom Tree;(2)根据css生成cssom;(3)将dom和cssom整合形成rendertree(4)根据rendertree,开始渲染和展示;(5)遇到<script>时,会执行并阻塞渲染;
13、window.onload和DomContentLoaded的区别是什么?
答:window.onload是等页面的 所有内容加载完才执行,包括图片视频等;
DomContentLoaded是dom渲染完就可执行,这时可能图片视频还没有加载完。
14、性能优化
答:a:加载资源优化(1)静态资源的压缩合并;(2)静态资源缓存(3)使用cdn使资源加载更快;(4)使用ssr后端渲染,数据直接输出到html中
b.渲染优化(1)css放前边,js放后边;(2)、懒加载(图片懒加载,下拉加载更多);(3)减少dom操作;(4)、事件节流(5)尽早执行操作(如domContentLoaded)