1.javascript的typeof返回哪些数据类型.
答案:string,boolean,number,undefined,function,object
检测数据数据类型的方式
2.例举3种强制类型转换和2种隐式类型转换?
答案:强制(parseInt,parseFloat,number)
隐式(== ===) 还有判断是null “” undefined 0 会转换成false 1会转换成true
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
Vartarget=ev.srcElement||ev.target
var scrollTop = windows.scrollTop || document.documentElement.scrollTop
6.ajax请求的时候get和post方式的区别
答案:
一个在url后面,一个放在虚拟载体里面
get有大小限制(只能提交少量参数)
安全问题
应用不同,请求数据和提交数据
7.call和apply的区别
答案:
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
1
2
8.ajax请求时,如何解析json数据
答案:使用JSON.parse
9.事件委托是什么
答案:利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!
10.闭包是什么,有什么特性,对页面有什么影响
答案:闭包就是能够读取其他函数内部变量的函数,使得函数不被GC回收,如
果过多使用闭包,容易导致内存泄露
11.如何阻止事件冒泡
答案:ie:阻止冒泡ev.cancelBubble=true;非IEev.stopPropagation();
12.如何阻止默认事件
答案:(1)return false;(2)ev.preventDefault(); (3)IE兼容写法 e.returnValue = false;
13.添加删除替换插入到某个接点的方法
答案:
1)创建新节点
createElement()//创建一个具体的元素
createTextNode()//创建一个文本节点
2)添加、移除、替换、插入
appendChild()//添加
removeChild()//移除
replaceChild()//替换
insertBefore()//插入 每个元素的前面增加
3)查找
getElementsByTagName()//通过标签名称
getElementsByName()//通过元素的Name属性的值
getElementById()//通过元素Id,唯一性
14.解释jsonp的原理,以及为什么不是真正的ajax
答案:动态创建script标签,回调函数
Ajax是页面无刷新请求数据操作
15.window.load和document.ready的区别
答案:window.onload是在结构和样式,外部js以及图片加载完(即页面加载完成之后)才执行js
document.ready是dom树创建完成就执行(即documnet文档加载完成)的方法,原生种没有这个方法,
jquery中有$().ready(function)
16.””和“=”的不同
答案:前者会自动转换类型,再判断是否相等
后者不会自动类型转换,直接去比较 (=是赋值运算符)
17.函数声明与函数表达式的区别?
在Javscript中,解析器在向执行环境中加载数据时,对函数声明和函数表达式
并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可
用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,
才会真正被解析执行。
18.对作用域上下文和this的理解,看下列代码:
varUser={
count:1,
getCount:function(){
returnthis.count;
}
};
console.log(User.getCount());//this指向的是当前对象
varfunc=User.getCount;//func是一个普通函数了
console.log(func());//普通函数的this指向是windows,局部变量没有定义返回undefined
问两处console输出什么?为什么?
答案:是1和undefined。
func是在window的上下文中被执行的,所以不会访问到count属性。
19.看下面代码,给出输出结果。
for(vari=1;i<=3;i++){//建议使用let可正常输出i的值
setTimeout(function(){
console.log(i);
},0);//定时器在for循环之后运行。
};
答案:444。
原因:Javascript事件处理器在线程空闲之前不会运行。
20.当一个DOM节点被点击时候,我们希望能够执行一
个函数,应该怎么做?
box.onclick=function(){}
box.addEventListener("click",function(){},false);//二级事件,可以绑定多个事件
box.attachEvent()//IE兼容 绑定事件
21.Javascript的事件流模型都有什么?
“事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播
“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的
“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡
22.看下列代码,输出什么?解释原因。
var a=null;
alert(typeofa);
1
2
答案:object
解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对
象,所以用typeof检测会返回”object”。
23.判断字符串以字母开头,后面可以是数字,下划线,
字母,长度为6-30
varreg=/^[a-zA-Z]w{5,29}$/;
1
24.回答以下代码,alert的值分别是多少?
<script>
var a=100;
functiontest(){
alert(a);
a=10;//去掉了var就变成定义了全局变量了
alert(a);
}
test();
alert(a);
</script>
扩展:
1.检测数据类型的方式案例object.prototype.toString.call()
(1)typeof(该变量) 返回数据类型 (2)instantofvar arr = []; arr instanceof Array 返回true和false
(3)curstructor var arr = []; arr.constructor === Array;返回true和false (4)object.prototype.toString.call()
⒉数组的常用方法字符串常用方法 join split splice slice区别
(1)、slice slice() 可用于数组与字符串,返回一个新的数组,原数组不改变,包含从 start 到 end (不包括该元素)的元素。返回一个新的数组,
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
(2)、splice splice()方法向/从数组中添加/删除项目,然后返回被删除的项目。会改变原始数组。它可以用于插入、删除或替换数组的元素。
参数至少两个,index为必选项,表示操作数组的起始位置,负数表示从倒数开始。
howmany为必选项,表示从起始位置开始要替换或删除几个元素。如果设置为 0,则不会删除项目。
第三个及以上 item(包括item1、item2...)可选。向数组添加的新项目。有则替换没有则表示删除。
(3)、split 用于把一个字符串分割成字符串数组,可用于数组与字符串,返回一个字符串数组。
split(separator,howmany)separator是必选项。表示分割字符串的符号。howmany为可选项,表示分割后返回的结果长度。
(4)、join(separator) 方法用于把数组中的所有元素放入一个字符串
separator 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。
3.阻止事件的冒泡兼容写法
if(document.all){ //只有ie识别
e.cancelBubble=true;
}else{
e.stopPropagation();
}
4.addEventListener绑定事件的参数,附带案例attachEvent
addEventListener("click",function(){},true);
第一个参数是事件类型
第二个参数就是事件函数
第三个参数 true时捕获,false时冒泡。