1.javascript的typeof返回哪些数据类型
Object number function boolean underfind string;
2.强制类型转换
- 强制(parseInt(),parseFloat(),number(),string(),Boolean())
3.数组方法pop() push() unshift() shift()
- Push()尾部添加
- pop()尾部删除,返回删除后剩下的元素
- Unshift()头部添加
- shift()头部删除,返回删除后剩下的元素
4.ajax请求的时候get 和post方式的区别?
- 一个在url后面 一个放在虚拟载体里面;GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器
- 安全问题:GEt传输数据容量小,不安全,post传输数据内容大,更加安全;
- 应用不同 :get是论坛等只需要请求的,post是类似修改密码的;
5.call()和apply()
call():
function.call(obj[,arg1[, arg2[, [,.argN]]]]])
- 调用
call
的对象必须是个函数function call
的第一个参数将会是function改变上下文后指向的对象,如果不传,将会默认是全局对象window
- 第二个参数开始可以接收任意个参数,这些参数将会作为function的参数传入function
- 调用
call
的方法会立即执行
apply()
function.apply(obj[,argArray])
与call
方法的使用基本一致,但是只接收两个参数,其中第二个参数必须是一个数组或者类数组
相同点
都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行
不同点
call
方法从第二个参数开始可以接收任意个参数,每个参数会映射到相应位置的func的参数上,可以通过参数名调用,但是如果将所有的参数作为数组传入,它们会作为一个整体映射到func对应的第一个参数上,之后参数都为空
function func (a,b,c) {}
func.call(obj, 1,2,3)
// function接收到的参数实际上是 1,2,3
func.call(obj, [1,2,3])
// function接收到的参数实际上是 [1,2,3],undefined,undefined
apply
方法最多只有两个参数,第二个参数接收数组或者类数组,但是都会被转换成类数组传入func中,并且会被映射到func对应的参数上
func.apply(obj, [1,2,3])
// function接收到的参数实际上是 1,2,3
func.apply(obj, {
0: 1,
1: 2,
2: 3,
length: 3
})
// function接收到的参数实际上是 1,2,3
两个方法该如何选择?
根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call
,当要传入多个对象时,用apply
或者,如果需要传入的参数已经是一个数组或者类数组了,就用apply
,如果还是单独的需要逐个传入的,可以考虑使用call
【call其他用途——对象继承】
由于可以改变this
的指向,所以也就可以实现对象的继承
function superClass () {
this.a = 1;
this.print = function () {
console.log(this.a);
}
}
function subClass () {
superClass.call(this);
this.print();
}
subClass();
// 1
subClass
通过call
方法,继承了superClass
的print
方法和a
变量,同时subClass
还可以扩展自己的其他方法
6.ajax请求时,如何解释json数据
- 鉴于安全性考虑 使用ison.parse();
7.事件委托是什么
- 让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!
8.添加 删除 替换 插入到某个接点的方法
obj.appendChidl()——添加
obj.innersetBefore——插入
obj.replaceChild——替换
obj.removeChild——删除
9.说一下什么是javascript的同源策略?
- 一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合
10.编写一个b继承a的方法;
function A(name){
this.name = name;
this.sayHello = function(){alert(this.name+” say Hello!”);};
}
function B(name,id){
this.temp = A;
this.temp(name); //相当于new A();
delete this.temp;
this.id = id;
this.checkId = function(ID){alert(this.id==ID)};
}
11.如何阻止事件冒泡和默认事件
function stopBubble(e)
{
if (e && e.stopPropagation)
e.stopPropagation()
else
window.event.cancelBubble=true
}
return false
12.下面程序的结果
function fun(n,o) {
console.log(o)
return {
fun:function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1); c.fun(2); c.fun(3);
//答案:
//a: undefined,0,0,0
//b: undefined,0,1,2
//c: undefined,0,1,1