js、jQuery、ajax面试题
1.javascript的typeof返回哪些数据类型.
答案:string,boolean,number,undefined,function,object
2.例举3种强制类型转换和2种隐式类型转换?
答案:强制(parseInt,parseFloat,number)
隐式(=====)
3.split()join()的区别
答案:前者是将字符串切割成数组的形式,后者是将数组转换成字符串
4.数组方法pop()push()unshift()shift()
答案:push()尾部添加pop()尾部删除
unshift()头部添加shift()头部删除
5.IE和标准下有哪些兼容性的写法
答案:
Var ev=ev||window.event
document.documentElement.clientWidth||document.body.clientWidth
Var target=ev.srcElement||ev.target
6.ajax请求的时候get和post方式的区别
答案:1、一个在url后面,一个放在虚拟载体里面
2、get有大小限制(只能提交少量参数)
3、安全问题
4、应用不同,请求数据和提交数据
7.call和apply的区别
答案:Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
8.ajax请求时,如何解析json数据
答案:使用JSON.parse
9.事件委托是什么
答案:利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!
10.闭包是什么,有什么特性,对页面有什么影响
答案:闭包就是能够读取其他函数内部变量的函数,使得函数不被GC回收,如果过多使用闭包,容易导致内存泄露
11.如何阻止事件冒泡
答案:ie:阻止冒泡ev.cancelBubble=true;非IEev.stopPropagation();
12.如何阻止默认事件
答案:(1)return false;(2)ev.preventDefault();
13.添加删除替换插入到某个接点的方法
答案:
1)创建新节点
createElement()//创建一个具体的元素
createTextNode()//创建一个文本节点
2)添加、移除、替换、插入
appendChild()//添加
removeChild()//移除
replaceChild()//替换
insertBefore()//插入
3)查找
getElementsByTagName()//通过标签名称
getElementsByName()//通过元素的Name属性的值
getElementById()//通过元素Id,唯一性
14.解释jsonp的原理,以及为什么不是真正的ajax
答案:动态创建script标签,回调函数
Ajax是页面无刷新请求数据操作
15.document load和document ready的区别
答案:document.onload是在结构和样式,外部js以及图片加载完才执行js
document.ready是dom树创建完成就执行的方法,原生种没有这个方法,
jquery中有$().ready(function)
16.””和“=”的不同
答案:前者会自动转换类型,再判断是否相等
后者不会自动类型转换,直接去比较
17.函数声明与函数表达式的区别?
答案:在Javscript中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。
18.对作用域上下文和this的理解,看下列代码:
varUser={
count:1,
getCount:function(){
return this.count;
}
};
console.log(User.getCount());
var func=User.getCount;
console.log(func());
问两处console输出什么?为什么?
答案:是1和undefined。
func是在window的上下文中被执行的,所以不会访问到count属性。
19.看下面代码,给出输出结果。
for(vari=1;i<=3;i++){//建议使用let可正常输出i的值
setTimeout(function(){
console.log(i);
},0);
};
答案:4 4 4
原因:Javascript事件处理器在线程空闲之前不会运行。
20.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?
box.onlick=function(){}
box.addEventListener("click",function(){},false);
<buttononclick="xxx()"></button>
21.Javascript的事件流模型都有什么?
答案:1、“事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播
2、“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的
3、“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡
22.看下列代码,输出什么?解释原因。
var a=null;
alert(typeof a);
答案:object
解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,所以用typeof检测会返回”object”。
23.判断字符串以字母开头,后面可以是数字,下划线,字母,长度为6-30
答案:Var reg=/^[a-zA-Z]\w{5,29}$/;
24.回答以下代码,alert的值分别是多少?
<script>
Var a=100;
functiontest(){
alert(a);
a=10;//去掉了var就变成定义了全局变量了
alert(a);
}
test();
alert(a);
</script>
正确答案:100,10,10
25.javaScript的2种变量范围有什么不同?
全局变量:当前页面内有效
局部变量:函数方法内有效
26.null和undefined的区别?
1、null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
2、当声明的变量还未被初始化时,变量的默认值为undefined。null用来表示尚未存在的对象。
3、undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
null表示"没有对象",即该处不应该有值。典型用法是:
(1)作为函数的参数,表示该函数的参数不是对象。
(2)作为对象原型链的终点。
27.new操作符具体干了什么呢?
1、创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型。
2、属性和方法被加入到this引用的对象中。
3、新创建的对象由this所引用,并且最后隐式的返回this。
28.js延迟加载的方式有哪些?
defer和async、动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)、按需异步载入js
29.Flash、Ajax各自的优缺点,在使用中如何取舍?
Flashajax对比:
(1)Flash适合处理多媒体、矢量图形、访问机器;对CSS、处理文本上不足,不容易被搜索。
(2)ajax对CSS、文本支持很好,支持搜索;多媒体、矢量图形、机器访问不足。
共同点:与服务器的无刷新传递消息、用户离线和在线状态、操作DOM
30.写一个获取非行间样式的函数
functiongetStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
getComputedStyle(obi,false)[attr];
}
}