1.请简要说明jQuery框架的显著特点。
jQuery强调的理念是写的少,做的多(write less,do more)。其主要特点有:轻量级、强大的选择器、漂亮的DOM操作封装、可靠的事件处理机制、完善的Ajax处理、出色的浏览器兼容性、链式操作方式、丰富的插件支持、开源产品。
2.eval是做什么的?
eval功能是把对应的字符串解析成JS代码并运行;但不安全,非常耗性能。
3.null与undefined的区别?
Undefined类型只有一个值,即undefined,当声明的变量还未被初始化时,变量的默认值为undefined。Null类型也只有一个值,即null,null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
4.谈谈对this对象的理解。
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是有一个总原则,那就是this指的是调用函数的那个对象。
5.use strict是什么意思?
表示代码标志为“严格模式”,则其中运行的所有代码都必然是严格模式下的。如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常。如果在运行期出现了违反严格模式的代码,则抛出执行异常。
6.简述new操作符的功能。
(1)创建一个空对象,使用this变量引用该对象,同时还继承了该函数的原型
(2)属性和方法被加入到this引用的对象中。
(3)新创建的对象由this所引用,并且最后隐式的返回this。
7.描述typeof关键字的功能。
typeof可用来判断一个变量是否为空或是什么类型的变量。typeof一般只能返回如下几个结果:number、boolean、string、function、object、undefined。
8.描述instanceof关键字的功能。
instanceof可用来判断一个变量是否为空或是什么类型的变量。如果想判断一个变量是否某个对象的实例建议使用instanceof关键字。
9.简述hasOwnProperty函数的功能。
hasOwnProperty函数是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
10.简述一下isPrototypeOf函数的功能。
isPrototypeOf函数是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。
11.谈谈对JSON的了解。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。其是基于JavaScript的一个子集,具有数据格式简单,易于读写,占用空间小的特点。
12.Ajax是什么?
AJAX即“Asynchronous Javascript+XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
13.同步请求和异步请求的区别?
同步:提交请求→等待服务器处理→处理完毕返回,这个期间客户端浏览器不能干任何事。
异步:请求通过事件触发→服务器处理(这是浏览器仍然可以作其他事情)→处理完毕。
14.jQuery如何解决跨域问题?
借助JSONP这个非官方的协议,其允许在服务器端集成script tags返回至客户端,通过callback的形式实现跨域访问JSONP即JSON with Padding。如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。
15.异步加载的方式有哪些?
(1)defer,只支持IE;
(2)async;
(3)创建script,插入到DOM;
16.如何编写高性能的jQuery代码?
定义jQuery变量的时候添加var关键字;DOM操作请务必记住缓存(cache);尽量使用链式操作;尽量把一些代码都整合到一起;避免使用全局类型的选择器;尽量使用.on方法,因为其它任何方法都是最终使用.on方法来实现的;尽量使用最新版本的jQuery框架类库。
17.jQuery与jQuery UI有啥区别?
(1)jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。
(2)jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等。
18.描述基于class的选择器与基于id选择器在性能上的区别。
基于class的选择性的性能相对于基于id选择器开销很大,因为其需要遍历所有DOM元素。
19.jQuery链式调用的最大优点是什么?
避免频繁操作的DOM,链式调用可以实现先缓存再操作。
20.一句话说明内存泄漏的定义。
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
21.那些操作会造成内存泄漏?
给DOM对象添加的属性是一个对象的引用。
DOM对象与JS对象相互引用。
给DOM对象用attachEvent绑定事件。
从外到内执行appendChild,这时即使调用removeChild也无法释放。
反复重写同一个属性会造成内存大量占用。
22.描述垃圾回收器的功能。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
23.documen.write和innerHTML的区别?
document.write只能重绘整个页面,innerHTML可以重绘页面的一部分。
24.jQuery框架的源码看过吗?能不能简单说一下它的实现原理?
jQuery框架通过改变javascript编码方式来创建了全新的编程理念。譬如关于jQuery声明的流程:先查找(创建)jQuery对象,然后调用jQuery对象的方法完成我们需要完成的工作。jQuery就是以这种可以说是最简单的编码逻辑来改变javascript编码方式的,这个流程就是jQuery的编码逻辑核心。
25.jQuery中如何将对象转化为json字符串,然后再转化回来?
可以通过JSON.stringify方法把一个对象转换成json字符串,再通过JSON.parse方法把一个json字符串解析成对象。
26.描述一下.get()、[]和.eq()方法的区别。
eq返回原生jQuery对象,截取某些el元素生成jQuery新对象;get和[]返回的都是原生的DOM对象,原理一致;get和[]区别是get是通过jQuery对象的方法获取,[]是根据jQuery是一个数组对象获取。
27.描述一下context的概念。
context就是限定查找的范围,context必须是一个DOM元素,context底层还是用了.find()方法来实现的。
28.描述一下.delegate()和.live()方法的区别。
delegate方法指定了委托对象,live方法委托给了jQuery的context,1.9版本以后用on方法代替了。
29.描述一下.attr()和.prop()方法的区别。
.attr()方法是操作属性节点,.prop()方法是操作获取到的对应js对象的属性。在遇到要获取或设置checked、selected、readonly和disabled等属性时,用prop方法显然更好。.prop()方法更高效,因为.attr()方法要访问DOM。
30.jQuery中的load方法一般怎么用的?
load方法一般在载入远程HTML代码并插入到DOM中的时候用,通常用来从Web服务器上获取静态的数据文件。如果要传递参数的话,可以使用$.get()或$.post()方法。
使用jQuery来切换样式表
$('link[media='screen']').attr('href',alternative.css');
禁用右键单击上下文菜单
$(document).bind('contextmenu',function(e){
return false;
});
用jQuery来代替一个元素
$('#id-div').replaceWith('id-text-value');
用已创建的元素动态地添加到DOM中
var newDiv=$('<div></div>');
newDiv.attr('id','myNewDiv').appendTo('body');
取得父元素
$('#searchBox').closest('div');
在jQuery中克隆一个元素
var id-cloned=$('#somediv').clone();
添加html到元素中
$('#lal').append('sometext');
把函数绑定到事件上
$('#foo').click(function(event){
alert('user clicked on "foo."');
});