1.简述src和href的区别
href是表示超文本引用,用来建立当前元素和文档之间的链接。常用的有:link、a。src是source的缩写,用作引入。src指向的内容会嵌入到文档中当前标签所在的位置。常用的有:img、script、iframe。
2.简述同步和异步的区别
同步任务是指,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程,而是进入任务队列,只有等主线程任务执行完毕,任务队列开始通知主线程,请求执行任务,该任务才会进入主线程。
3.px和em区别
px:固定像素,不会受其他元素大小改变的影响,指定几px就是几px。
em:相对像素,相对父级元素字体大小来确定
rem:相对根元素html字体大小来确定
任何浏览器都支持px,IE6~8不支持em,rem,为了兼容浏览器,px和rem可以一起使用,IE6~8使用px,其他使用rem.
4.css新增单位vw,vh,wmin,wmax
vw,vh是根据视野窗口大小来确定的,单位为1。而%是相对父级元素。
兼容性
桌面pc
- Chrome:自 26 版起就完美支持(2013年2月)
- Firefox:自 19 版起就完美支持(2013年1月)
- Safari:自 6.1 版起就完美支持(2013年10月)
- Opera:自 15 版起就完美支持(2013年7月)
- IE:自 IE10 起(包括 Edge)到现在还只是部分支持(不支持 vmax,同时 vm 代替 vmin)
移动设备
- Android:自 4.4 版起就完美支持(2013年12月)
- iOS:自 iOS8 版起就完美支持(2014年9月)
5.sessionStroage,localStroage,cooike的区别
cookie:是服务器发给客服端的信息,存储在客服端,每次请求会带上token
设置过期时间:关闭浏览器,信息保存在硬盘中,过了设置的过期时间则会自动删除
不设置过期时间时:信息保存在内存中,关闭浏览器后信息消失。
缺点:单个cookie大小不能超过4kb,安全性低
应用场景
- 判断用户是否登陆过网站, 以便下次登录时能够实现自动登录(或者记住密码)。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。
- 保持上次登录的时间等信息
- 保存上次登录查看的页面
- 浏览计数
缺点
- 大小受限
- 用户可以禁用cookie, 使功能受限
- 安全性较低
- 有些状态不能保存在客户端
- 每次访问都要传送cookie给服务器,浪费带宽。
- cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下。
webStorage
localStroage(本地存储) 永久储存, 除非主动删除, 否则不会消失
sessionStroage(会话存储)
- 仅在当前会话下有效
- 在同源窗口始终存在, 浏览器关闭之前
- 浏览器打开新的同源页面
- 页面刷新 都还存在
- 打开一个新的浏览器窗口同一个页面, 同源的session也是不一样的
两者的存储大小都是5MB
都保存在客服端不与服务器进行交互
只能存储字符串类型
对于复杂的json格式可以进行stringify和parse来处理
获取方式
- window. localStroage
- window. sessionStorage
应用场景
- localStroage: 长期登录+判断用户是否登录, 长期存储在本地的数据
- sessionStorage: 敏感的一次性登录
优点
- 储存空间大
- 节省网络流量
- 可在本地直接获取
- 不需要与服务器进行交互
- 获取速度块
- 安全性较高
- API
- window. localStroage
- window. sessionStorage
- setItem(key, value): 保存某个数据
- getItem(key): 获取某个数据
- removeItem(key): 删除某条数据
- clear(): 清除所有数据
- key(index): 根据索引获取第几条数据的键名
6.ajax的工作原理,优点缺点
原理:通过xmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后使用javascript来操作DOM,从而刷新页面
ajax的优点
1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。
2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。
缺点:
1、破坏浏览器后退机制
2、安全问题
7.什么是css Hack
CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以达到应用不同的CSS样式的目的,比如.kwstu{width:300px;_width:200px;}
,一般浏览器会先给元素使用width:300px;的样式,紧接着后面还有个_width:200px;由于下划线_width只有IE6可以识别,所以此样式在IE6中实际设置对象的宽度为200px,后面的把前面的给覆盖了,而其他浏览器不识别_width不会执行_width:200px;这句样式,所以在其他浏览器中设置对象的宽度就是300px;
以下是引自百度百科的定义:CSS hack由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。 这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。 简单的说,CSS hack的目的就是使你的CSS代码兼容不同的浏览器。当然,我们也可以反过来利用CSS hack为不同版本的浏览器定制编写不同的CSS效果。
CSS属性Hack、CSS选择符Hack以及IE条件注释Hack, Hack主要针对IE浏览器。
1、属性级Hack:比如IE6能识别下划线“_
”和星号“*
”,IE7能识别星号“*
”,但不能识别下划线”_
”,而firefox两个都不能认识。
2、选择符级Hack:比如IE6能识别*html .class{}
,IE7能识别*+html .class{}
或者*:first-child+html .class{}
。
3、IE条件注释Hack:IE条件注释是微软IE5开始就提供的一种非标准逻辑语句。比如针对所有IE:<!-[if IE]><!-您的代码-><![endif]>
,针对IE6及以下版本:<!-[if it IE 7]><!-您的代码-><![endif]->
,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
PS:条件注释只有在IE浏览器下才能执行,这个代码在非IE浏览下被当做注释视而不见。可以通过IE条件注释载入不同的CSS、JS、HTML和服务器代码等。
为什么不推荐不推荐使用CSS hack来解决兼容性问题
CSS hack是因为现有浏览器对标准的解析不同,为了兼容各浏览器,所采用的一种补救方法。CSS hack是一种类似作弊的手段,以欺骗浏览器的方式达到兼容的目的,是用浏览器的兼容性差异来解决浏览器的兼容性问题。因此,在设计之初,写CSS hack需要遵循以下三条原则:
- 有效: 能够通过 Web 标准的验证
- 只针对太古老的/不再开发的/已被抛弃的浏览器, 而不是目前的主流浏览器
- 代码要丑陋。让人记住这是一个不得已而为之的 Hack, 时刻记住要想办法去掉它。现在很多hacks已经抛弃了最初的原则,而滥用hack会导致浏览器更新之后产生更多的兼容性问题。因此,并不推荐使用CSS hack来解决兼容性问题。
8.jivascript中如何检测一个变量是字符串类型,请写出函数
9.如何获取浏览器URL中查询字符串中的参数?
想要知道怎样解决这个问题,首先我们先认识一下Location对象。
Location对象包含了当前页面与位置(url)相关的信息
URL示例:http://www.baidu.com:80/news/index.aspx?id=1&name=location#top
Location对象共定义了8个属性:
href:声明了当前显示文档的完整的URL
protocol:声明URL的协议部分,包括后缀的冒号,例如http:
host:声明当前URL的主机名和端口号(是hostname和port的合集),例如www.baidu.com:80
hostname:声明当前URL的主机名,例如www.baidu.com
port:声明当前URL的端口部分,例如80
pathname:声明当前URL的路径部分,例如news/index.aspx
search:声明当前URL的查询部分,例如?id=1&name=localhost
hash:声明当前URL的锚的部分,例如#top,指定在文档中的锚记的名称
什么是查询字符串?就是Location对象的search属性的值,在这里指?id=1&name=location
那么用Locaton对象结合String对象的方法怎么获取呢?可以用下面这个函数获取:
function getQuery(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}
9.什么是xss攻击
中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻击。
跨站脚本的重点不在‘跨站’上,而在于‘脚本’上。大多数XSS攻击的主要方式是嵌入一段远程或者第三方域上的JS代码。实际上是在目标网站的作用域下执行了这段js代码。
xss跨站脚本攻击主要用于前端层面,在用户的输入层面插入攻击脚本,改变页面的显示,或窃取网站的cookie。
预防方法:不相信用户的所有输入,对用户的输入进行一个转义,不允许js对cookie的读取。
10.css动画与js动画的差异
css动画,声明用@keyframe ,使用animation。也能用js手写动画事件,jq用animation()方法。从动画性能来看。js动画需要执行js逻辑,有js的解析过程,性能会比css动画低。从代码复杂度上看,js代码比css动画代码要复杂,但是它能控制动画的暂停,取消,停止,css动画不能添加事件。
11.事件委托的currentTarget , target
currentTarget是绑定事件的元素(在函数中相当于this),target是指触发事件的具体元素