前端js面试题(基础)

怼烎@ 2022-05-26 04:44 325阅读 0赞
1、js中使用typeof能得到哪些类型?

——undefined、string、number、boolean、object、function

2、===和==分别在何时使用?
  1. //==的使用情况为以下2种(其他情况下推荐使用===)
  2. if(obj.a == null){
  3. //相当于obj.a === null || obj.a === undefined
  4. }
  5. function fn(a,b){
  6. if(a == null){
  7. //a要先定义
  8. }
  9. }
3、js中哪些内置函数

——Object、Array、Boolean、Number、String、Function、Date、RegExp、Error

4、js变量按照存储方式区分为哪些类型,并描述其特点

—— 值类型:赋值不会相互干涉;

  1. 引用类型:是指针的赋值,都指向内存空间中的同一个对象,会相互干涉;
5、如何理解json

——js对象(有两个API :JSON.stringify() 、JSON.parse())和数据格式

6、如何准确判断一个变量是数组类型
  1. console.log(arr instanceof Array);
7、写一个原型链继承的例子
  1. //DOM封装查询
  2. function Elem(id){
  3. this.elem = document.getElementById(id);
  4. }
  5. Elem.prototype.html = function(val){
  6. var elem = this.elem;
  7. if(val){
  8. elem.innerHTML = val;
  9. return this;
  10. }else{
  11. return elem.innerHTML;
  12. }
  13. }
  14. Elem.prototype.on = function (type,fn){
  15. var elem = this.elem;
  16. elem.addEventListener(type,fn);
  17. return this;
  18. }
  19. var div1 = new Elem('div1');
  20. div1.html('<p>hello world</p>').on('click',function(){
  21. alert('clicked');
  22. }).html('<p>hello javascript</p>');
8、描述new一个对象的过程

—— 1、创建一个新对象
2、this指向这个新对象
3、执行代码,即对this赋值
4、返回this

9、说一下对变量提升的理解

—— 变量定义;
函数声明(注意和函数表达式的区别)

#
10、说明this几种不同的使用场景

—— 1、作为构造函数执行
2、作为对象属性执行
3、作为普通函数执行
4、call、apply、bind

11、用js创建10个标签,点击的时候弹出来对应的序号

  1. var i;
  2. for(i=0;i<10;i++){
  3. (function(i){
  4. var a = document.createElement('a');
  5. a.innerHTML = i + '<br>';
  6. a.addEventListener('click',function(e){
  7. e.preventDefault();
  8. alert(i);
  9. });
  10. document.body.appendChild(a);
  11. })(i);
  12. }
12、如何理解作用域

—— 自由变量
作用域链,即自由变量的查找
闭包的两个场景(返回函数、作为参数传递)

13、实际开发中闭包的应用
  1. //闭包实际应用中主要用于封装变量,收敛权限
  2. //Exp1
  3. function F1(){
  4. var a =100;
  5. return function(){
  6. console.log(a);
  7. }
  8. }
  9. var f1 = F1();
  10. function F2(fn){
  11. var a = 200;
  12. fn()
  13. }
  14. F2(f1);
  15. //Exp2
  16. function ifFirstLoad(){
  17. var _list =[];
  18. return function(id){
  19. if(_list.indexOf(id)>=0){
  20. return false;
  21. }else{
  22. _list.push(id);
  23. return true;
  24. }
  25. }
  26. }
  27. var firstLoad = isFirstLoad();
  28. firstLoad(10); //true
  29. firstLoad(10); //false

14、同步和异步的区别

——同步会阻塞代码执行,而异步不会。

15、setTimeout()

  1. console.log(1);
  2. setTimeout(function(){
  3. console.log(2);
  4. },1000);
  5. console.log(3);

//1 3 2

16、前端使用异步的场景有哪些

—— 1、setTimeout、setInverval

  1. 2ajax请求、动态<img>加载
  2. 3、事件请求

(特点:都需要等待,由js是单线程语言所决定)

17、获取2018-4-26格式的日期

  1. function formatDate(dt){
  2. if(!dt){
  3. dt = new Date();
  4. }
  5. var year = dt.getFullYear();
  6. var month = dt.getMonth() + 1;
  7. var date = dt.getDate();
  8. if(month<10){
  9. month = '0' + month;
  10. }
  11. if(date<10){
  12. dae = '0' +date;
  13. }
  14. return year + '-' + month + '-' + date;
  15. }
  16. var dt = new Date();
  17. var formatDate = formatDate(dt);
  18. console.log(formatDate);

18、获取随机数(要求长度一致的字符串格式)

  1. var random = Math.random();
  2. var random = random + '0000000000';
  3. var random = random.slice(0,10);
  4. console.log(random);
  5. (Math.random():随时改变,清除缓存)

19、写一个能遍历对象和数组的通用的forEach函数

  1. function forEach(obj,fn){
  2. var key;
  3. if(obj instanceof Array){
  4. obj.forEach(function(item,index){
  5. fn(index,item);
  6. });
  7. }else{
  8. for(key in obj){
  9. fn(key,obj[key]);
  10. }
  11. }
  12. }
  13. var arr = [1,2,3];//数组
  14. forEach(arr,function(index,item){
  15. console.log(index,item);
  16. })
  17. var obj = {x:1,y:2};//对象
  18. forEach(obj,function(key,val){
  19. console.log(key,val);
  20. })
20、DOM是哪种基本的数据结构

——树

21、DOM操作的常用API有哪些

—— 1、获取DOM节点,以及节点的property和Attribute

  1. 2、获取父节点,获取子节点
  2. 3、新增节点,删除节点

换行与不换行的div的子节点的数量是不一样的)

22、DOM节点的attr和property有何区别

—— property只是一个js对象的属性的修改

  1. Attribute是对html标签属性的修改

23、如何检查浏览器的类型

  1. var ua = navigator.userAgent;
  2. var isChrome = ua.indexOf('Chrome');
  3. console.log(isChrome);

24、拆解url的各部分

  1. location.protocal //"https:"
  2. location.host //"blog.csdn.net"
  3. location.pathname //"/hannah1116"
  4. location.search //""
  5. location.hash //""
  6. location.href //"https://blog.csdn.net/hannah1116"
25、编写一个通用的事件监听函数
  1. function bindEvent(elem,type,selector,fn){
  2. if(fn == null){
  3. fn = selector;
  4. selector = null;
  5. }
  6. elem.addEventListener(type,function(event){
  7. var target;
  8. if(selector){
  9. target = event.target;
  10. if(target.matches(selector)){
  11. fn.call(target,event);
  12. }else{
  13. fn(event);
  14. }
  15. }
  16. });
  17. }
  18. //使用代理
  19. var div1 = document.getElementById("div1");
  20. bindEvent(div1,'click','a',function(event){
  21. console.log(this.innerHTML);
  22. });
  23. //不使用代理
  24. var a = document.getElementById("a1");
  25. bindEvent(div1,'click',function(event){
  26. console.log(a.innerHTML);
  27. });

26、描述事件冒泡流程

—— DOM树形结构

  1. 事件冒泡
  2. 阻止冒泡

27、对于一个无限下拉加载图片的页面,如何给每个图片绑定事件

—— 使用代理:代码简洁;减少浏览器内存占用;

28、手动编写一个ajax,不依赖第三方库

  1. var xhr = new XMLHttpRequest();
  2. xhr.open("GET","/api",true);
  3. xhr.onreadystatechange = function(){
  4. if(xhr.readyState == 4){//客户端可以使用
  5. if(xhr.status == 200){//表示成功处理请求
  6. alert(xhr.responseText);
  7. }
  8. }
  9. }
  10. xhr.send(null);

29、跨域的几种方式

—— 1、CORS跨域资源共享

  1. 2、图像Ping
  2. 3JSONP
  3. 4Comet
  4. 5、服务器发送事件
  5. 6Web Sockets

30、请描述一下cookie,sessionStorage和localStorage的区别

—— cookie:本身用于客户端和服务器端通信,但是有本地存储的功能

  1. 缺点:存储量太小,只有4KB;所有http请求都带着,会影响获取资源的效率;API简单,需要封装才能用document.cookie = ……
  2. localStoragesessionStorageHTML5专门为存储而设计
  3. 优点:最大容量为5MAPI简单易用:loaclStorage.setItem(key,value);localStorage.getItem(key);
  4. 注意:iOS safari隐藏模式下:localStorage.getItem会报错;建议统一使用try-catch封装;
  5. 区别:容量、是否会携带到ajax中、API易用性

31、上线流程和回滚的要点

—— 上线流程要点:

  1. 1)将测试完成的代码提交到git版本库的master分支
  2. 2)将当前服务器的代码全部打包并记录版本号,备份
  3. 3)将master分支的代码提交覆盖到线上服务器,生成新版本号
  4. 回滚流程要点:
  5. 1)将当前服务器的代码打包并记录版本号,备份
  6. 2)将备份的上一个版本号解压,覆盖到线上服务器,并生成新的版本号

32、从输入url到得到html的详细过程

—— 1、浏览器根据DNS服务器得到域名的IP地址

  1. 2、向这个IP的机器发送HTTP请求
  2. 3、服务器收到、处理并返回HTTP请求
  3. 4、浏览器得到返回内容
33、window.onload和DOMContentLoaded的区别?

—— window.onload:页面的全部资源加载完才可执行(包括图片、视频)

  1. DOMContentLoadedDOM渲染完即可执行(此时图片、视频还没有加载完)

34、加载资源优化

—— 1、静态资源的压缩合并

  1. 2、静态资源缓存
  2. 3、使用CDN让资源加载更快
  3. 4、使用SSR后端渲染,数据直接输出到HTML

35、渲染优化

—— 1、CSS放前面,JS放后面

  1. 2、懒加载(图片懒加载、下拉加载更多)
  2. 3、减少DOM查询,对DOM查询做缓存
  3. 4、减少DOM操作,多个操作尽量合并在一起执行
  4. 5、事件节流
  5. 6、尽早执行操作(如DOMContentLoaded)

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读

    相关 前端 js面试

    1.简述同步和异步的区别 2.怎么添加、移除、复制、创建、和查找节点 3.实现一个函数clone 可以对Javascript中的五种主要数据类型(Number、stri

    相关 前端基础面试

    1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 2.声明函数作用提升?声明变量和声明函数的提升有什么区别? 3.判断数据类型? 4.异步编程?