1、typeof有6种类型:
undefined, boolen, string, number, object(null), function。
对象未初始化时一般先赋值null而不是其他值。
null == undefined //true
null === undefined //false
2、值为false:0, "", NAN, false, null, undefined
3、JS短路运算
&&:为真,返回最后一个数,为假,返回第一个数;
||:为真,返回第一个数,为假,返回最后一个数。
4、responseText:通常纯文本、json、(X)HTML都使用responseText。
responseXML:通常返回XML格式文档,返回XML文档时servlet要设置;可以使用DOM节点树和属性对XML文档对象进行检查和解析。
5、分页:
分页是服务器把某页需要的数据从数据库里面取出来,放到模板上面,生成HTML页面返回给浏览器,最终呈现在用户面前。
动态加载算是分页的一种。
6、存储
(1)cookie有长度限制,有个数限制,可以通过每个cookie里面设置子cookie来增加cookie数量。不能跨页面,有过期时间。
web storage
(2)sessionStorage和cookis类似,不过可以跨页面,适合小段数据存储,浏览器支持的话浏览器崩溃后重启依然可用。本地运行不可用。
(3)globalStorage(HTML5中被localStorage取代)用来跨会话存储,不过需要指定哪些域可以访问该数据,数据存储到通过JavaScript删除或者是用户清除浏览器缓存。
(4)localStorage,和globalStorage类似,不过规则更加严格,页面必须来自同一域名(子域名无效)、协议、端口,数据存储到通过JavaScript删除或者是用户清除浏览器缓存。
7、AJAX(Asynchronous JavaScript and XML):
无需刷新即可从服务器取得数据、动态加载页面。
status:
0:无缓存
1:闲置
2:检查中
3:下载中
4:更新完成
5:废弃
8、GET和POST区别:
GET方法:
(1)、使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器:
(2)、GET请求能够被缓存
(3)、GET请求会保存在浏览器的浏览记录中
(4)、以GET请求的URL能够保存为浏览器书签
(5)、GET请求有长度限制
(6)、GET请求主要用以获取数据
(7)、安全性: 查询字符串会显示在地址栏的URL中,不安全,请不要使用GET请求提交敏感数据
(8)、数据类型限制: 只允许ASCII字符类型
POST方法:
(1)、使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器:
(2)、POST请求不能被缓存下来
(3)、POST请求不会保存在浏览器浏览记录中
(4)、以POST请求的URL无法保存为浏览器书签
(5)、POST请求没有长度限制
(6)、POST请求主要用于传递数据
(7)、安全性:因为数据不会显示在地址栏中,也不会缓存下来或保存在浏览记录中,所以看POST求情比GET请求安全,但也不是最安全的方式。如需要传送敏感数据,请使用加密方式传输
(8)、数据类型限制:没有限制。允许二进制数据
9、JSON:
没有分号和变量,不支持undefined类型;
js不能直接读取JSON变量。js直接写JSON时最好写完后再使用Stringify()转成JSON。
10、事件委托:利用了事件冒泡,只指定一个事件处理程序,就能够管理某一类型的所有事件。使用事件委托,只需在DOM树中尽量最高的层次上添加一个事件处理程序。
11、闭包是指有权访问另一个函数作用域中变量的函数。闭包实现了封装。闭包只能返回包含函数中任何变量的最后一个值。闭包容易造成内存泄漏。
12、this对象运行时是基于函数的执行环境绑定的。匿名函数的执行环境具有全局性,因此其this对象通常指向window。函数执行都会取得this和arguments。
13、DOM:
(1)insertAdjacentHTML():
beforebegin:同辈元素,之前插入
afterend:同辈元素,之后插入
beforeend:子元素,插入最后
afterbegin:子元素,插入最前
(2)classList
contains:是否包含类
add:添加类
remove:删除类
toggle:添加或者删除类
完全修改或者删除类采用className
14、call,apply,bind方法的用法、联系和区别
这三个方法都是用于指定函数内部的this指向的问题,方式都差不多,只是存在使用形式上的不同。
(1):第一个参数都是指定函数内部中this的指向(函数执行时所在的作用域),然后根据指定的作用域,调用该函数。
(2):都可以在函数调用时传递参数。call,bind方法需要直接传入,而apply方法需要以数组的形式传入。
(3):call,apply方法是在调用之后立即执行函数;而bind方法没有立即执行,只是赋值。要执行需要在后面加上()来立即调用。
15、跨域
JavaScript的安全策略中不允许跨域调用其它页面的对象。跨域是指同一域名不同端口、同一域名不同协议域名和域名对应IP、主域名相同子域名不同(次级域名不同)、不同域名之间对象的调用。有src的都可以实现跨域。
16、web优化:
加缓存。
几乎绝大部分优化都围绕这个来进行的。让用户最快的看到结果。
相同的JS、CSS、图片等使用浏览器缓存
1)、根据服务器端的响应header,一个文件对浏览器而言,有几级不同的缓存状态。
(1)服务器端告诉浏览器不要缓存此文件,每次都到服务器上更新文件。
(2)服务器端没有给浏览器任何指示。
(3)在上次传输中,服务器给浏览器发送了Last-Modified或Etag数据,再次浏览时浏览器将提交这些数据到服务器,验证本地版本是否最新的,如果为最新的则服务器返回304代码,告诉浏览器直接使用本地版本,否则下载新版本。一般来说,有且只有静态文件,服务器端才会给出这些数据。
(4)服务器强制要求浏览器缓存文件,并设置了过期时间。在缓存未到期之前,浏览器将直接使用本地缓存文件,不会与服务器端产生任何通信。
2)、从输入URL到页面呈现需要下面5个步骤
(1)输入URL地址或者点击URL的一个链接
(2)浏览器根据URL地址,结合DNS,解析出URL对应的IP地址
(3)发送HTTP请求
(4)开始连接请求的服务器并且请求相关的内容
(5)浏览器解析从服务器端返回的内容,并且把页面显现出来
3)、浏览器就向服务器发送HTTP的请求,过程如下:
(1)浏览器通过发送一个TCP的包,要求服务器打开连接
(2)服务器也通过发送一个包来应答客户端的浏览器,告诉浏览器连接开了。
(3)浏览器发送一个HTTP的GET请求,这个请求包含了很多的东西了,例如我们常见的cookie和其他的head头信息。
压缩信息。
1)、静态资源压缩,(合并js、css、图片,使用grunt压缩,使用背景图片background-image定位等替代加载的图片)
2)、内容的滚动加载(瀑布流),
3)、异步请求,
4)、http请求合并
5)、减少http请求等。
6)、使用外部的JS和CSS
分布、集群。(分散单个服务器的压力,加快并行下载速度)
1)、cdn缓存加速
2)、动静分离
17、map(), forEach(), some(), every(), filter():
可以从右到左省略参数(对应数组元素、对应数组索引、数组,全部都不改变原数组。
(1)map(element, index, array)
执行每一项并通过return返回值,return返回的值为当前索引对应的值
(2)forEach(element, index, array)
执行每一项,但没有return,不改变原来数组,但可以通过索引改变原来数组对应的值
(3)some(element, index, array)
有一项为true则返回true,否则返回false
(4)every(element, index, array)
所有项返回true才返回true,否则返回false
(5)filter(element, index, array)
创建新的数组,返回为true的数组的元素
18、优雅降级、渐进增强
渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。
19、端口(默认)
Http:80
Https:443
Ftp:20或21(更常用)
20、Http状态码:
成功
200 OK
重定向
304 Not Modified
请求错误
400 Bad Request
403 Forbidden
404 Not Found
服务器错误
502 Bad Gateway
21、作用域链:
在执行环境中对变量与函数的有权访问和有序访问。