乐趣区

前端面试汇总js

做前端也已经好几年了,大大小小的面试也经历过好多次了,遇到过各种奇葩面试官,也遇到过很犀利的大牛,最近又开始找工作,所以整理了这些面试题,也算是重新复习一遍。

1、cookie、localStorage、sessionStorage 的区别和使用?

    cookie:是存储在本地的数据,有时候也用 cookies,通常经过加密,应用最经典的就是判断注册用户是否已经登录过该网站。localStorage:仅在客户端保存(即浏览器),不参与和服务器的通信;没有时间限制,即使浏览器关闭,数据依然存在;创建和访问 localStorage:1)、设置数据:var forgetData = {phone:vm.phone};
        localStorage.setItem("forgetData",JSON.Stringfy(forgetData));    //forgetData 是存储在 localStorage 里边的本地数据;JSON.Stringfy(forgetData) 是将数据转化为字符串格式;获取数据:vm.forgetData=JSON.parse(localStorage.getItem("forgetData"));  // 将对象转化为 json;2)、设置:localStorage.name = "zhao";
             获取:localStorage.name    //zhao

        localStorage.setItem(key,value);// 设置数据
        localStorage.getItem(key);// 获取数据
        localStorage.removeItem(key);// 删除单个数据
        localStorage.clear();// 清除所有 localStorage 的数据

    sessionStorage:当用户的浏览器窗口关闭时,数据会被清除;共同点:都是保存在浏览器端,且同源的。区别:cookie 数据始终在同源的 http 请求中携带 9 即使不需要 ),即 cookie 在浏览器和服务器之间来回传递;cookie 数据还有路径的概念,可以限制 cookie 只属于某个路径下。存储大小限制也不同,cookie 数据大小不能超过 4K,同时因为每次 http 请求都会携带 cookie,所以 cookie 只能保存很小的数据。sessionStorage 和 localStorage 不会自动把数据发给服务器,只在本地保存,虽然也有大小限制,但是要比 cookie 大得多,可以达到 5M 或者更大。数据有效期不同,sessionStorage 仅在当前浏览器窗口关闭前有效,不能持久保存;localStorage:始终有效,浏览器窗口关闭也一直保存;cookie:只在 cookie 设置的过期时间之前保存,即使浏览器窗口关闭。作用域不同,sessionStorage 在不同浏览器窗口的数据不能共享,即使是同一个页面;localStorage 在所有的同源窗口中都是共享的;cookie 也是在同源窗口中共享的,

2、如何实现浏览器多标签页之间的通信?

    调用 localStorage、cookie 本地存储方式。

3、JavaScript 的 typeof 返回类型有哪些?

Object(null 和 Array)、number、undefined、string、Boolean

4、类型转换

 强制转换:parseInt();parseFloat();number();

5、数组的方法

var list = [1,2,3];
list.pop();// 删除数组的最后一个元素 var list = [1,2];
list.unshift(0,1);// 头部添加  var list = [0,1,1,2,3];
list.push(4,5);// 尾部添加   var list = [1,2,3,4,5];
var arr = list.concat(4,[5,6]);// 把两个数组连接起来 //var arr = [1,2,3,4,5];  //var list = [1,2,3];
list.join("-");    //1-2-3
list.reverse();//3,2,1
list.slice(1);//var list = [2,3];
list.slice(1,2);//var list = [2];
list.slice(1,-2);// 设置了两个参数,终止下标为负数,当出现负数时,将负数加上数组长度的值来替换该位置的数。var arr = list.splice(0,1);// 删除 var list = [2,3];  var arr = [1]; 可以删除任意数量的项,只需指定 2 个参数;要删除的第一项的位置和要删除的项数。例如 splice(0,2); 会删除当前数组的前两项
list.splice(2,0,4,6);// 插入,var list = [1,2,4,6,3]; 可以向指定位置插入任意数量的项,需要 3 个参数,起始位置、0(要删除的项数)、要插入的任意数量的项。例如 splice(2,0,4,6); 会从第二个位置插入 4 和 6;list.splice(2,1,4,6);// 替换,var list = [1,2,6,3]; 可以向指定位置插入任意数量的项,同时删除任意数量的项,需要 3 个参数,起始位置、要删除的项数、要插入的任意数量的项。例如 splice(2,1,4,6); 会从位置 2 开始插入 4 和 6。list.sort();// 按照第一个数字大小进行排序;
function compare(a,b){
    return a-b;// 正序;return b-a;// 倒序;}
list.sort(compare);

6、ajax 请求时 get 和 post 的区别?

get:从服务器上获取数据,传送数据量小,安全性低,请求会被缓存,缓存是针对 URL 进行缓存的,get 请求参数直接加在 URL 地址后面,一种参数组合就会产生一种 URL 的缓存,重复的请求结果是相同的;post:向服务器发送数据;传送数据量大,请求不会被缓存,参数封装在二进制的数据体中,服务器也不会记录参数,相对安全,所以涉及用户隐私的数据都要用 post 传送;

7、ajax 请求时,如何解释 json 数据?

 使用 eval 方法解析的时候,eval(); 不会去判断该字符串是否合法,而且 json 对象里的 js 方法也会被执行,这是非常危险的;推荐使用 JSON.parse(); JSON.parse(); 把字符串转化成 json。

8、call 和 apply 的区别?

 共同点:都可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。另一种说法,都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行。不同点:apply();// 最多只能有两个参数 -- 新 this 对象和一个数组 argArray,如果给该方法传递多个参数,则把参数都写进这个数组里边,当然,即使只有一个参数,也要写进数组里边。call();// 可以接收多个参数,第一个参数 apply() 一样,后面则是一串参数列表。实际上,apply 和 call 的功能是一样的,只是传入的参数列表的形式不同。

9、http 常用状态码?

    100  Continue  继续,一般在发送 post 请求时,已发送了 http header 之后服务端将返回此信息,表示确认,之后发送具体参数信息
    200  OK   正常返回信息
    201  Created  请求成功并且服务器创建了新的资源
    202  Accepted  服务器已接受请求,但尚未处理
    301  Moved Permanently  请求的网页已永久移动到新位置。302 Found  临时性重定向。303 See Other  临时性重定向,且总是使用 GET 请求新的 URI。304  Not Modified  自从上次请求后,请求的网页未修改过。400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。401 Unauthorized  请求未授权。403 Forbidden  禁止访问。404 Not Found  找不到如何与 URI 相匹配的资源。500 Internal Server Error  最常见的服务器端错误。503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

10. 你有哪些性能优化的方法?

(详情请看雅虎 14 条性能优化原则)。(1)减少 http 请求次数:CSS Sprites, JS、CSS 源码压缩、图片大小控制合适;网页 Gzip,CDN 托管,data 缓存,图片服务器。(2)前端模板 JS+ 数据,减少由于 HTML 标签导致的带宽浪费,前端用变量保存 AJAX 请求结果,每次操作本地变量,不用请求,减少请求次数(3)用 innerHTML 代替 DOM 操作,减少 DOM 操作次数,优化 javascript 性能。(4)当需要设置的样式很多时设置 className 而不是直接操作 style。(5)少用全局变量、缓存 DOM 节点查找的结果。减少 IO 读取操作。(6)避免使用 CSS Expression(css 表达式 ) 又称 Dynamic properties(动态属性)。(7)图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。

11. 深拷贝和浅拷贝

    基本类型指的是简单的数据段,引用类型指的是多个值构成的对象;var name = "John"; // 基本类型值

    var obj = new Object(); 
    obj.name = "John"; 
    // obj 为引用类型值
    
    在复制变量中,对于基本类型来说,两者互不影响,var num = 1;
    var num1 = num; // num1 = 1;

    var num1 = 3; // num 还是 1, 不会变
    
    浅拷贝和深拷贝的区别:对于浅拷贝来说,对于一个数组(数组是一个对象),只要我们修改了一个拷贝数组,原数组也会跟着改变。因为他们引用的是同一个地址的数据,拷贝的时候并没有给 b 数组创造独立的内存,只是把 a 数组指向数据的指针拷贝给了 b;而深拷贝就与其相反,将会给 b 数组创造独立的内存,并且将 a 数组的内容一一拷贝进来,两者互不影响。实现深拷贝:一:层级拷贝,用递归实现;二:JSON 解析
        var b = JSON.parse(JSON.stringify(a));
        
退出移动版