面试题总结
1.js中有5种数据类型:undefined、null、boolean、number和string。
还有一种复杂的数据类型object,object本质是一组无序的名值对组成的。
*js大小寫敏感,Object,String 都是function類型
2.函数内参数传递,对象引用传递,基本类型值传递
function setName(obj) {
obj.name = "simon";
obj = new Object();
obj.name = "lemon";
}
var person = new Object();
setName(person);
alert(person.name);//simon
-----------------------------
function setValue(b) {
b = 133;
}
var a = 10;
setValue(a);
alert(a);//10
3.js中this
1)纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。 (window)
2)作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
3)作为构造函数调用
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
4)apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
4.json和jsonp区别
一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;
现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>);
客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。
为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
5.ajax/事件冒泡在不同浏览器区别
ajax:
不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象。
事件冒泡:
由于IE浏览器以及Firefox对于冒泡型事件的支持层次不同造成的。
(1)在IE 6以及后续版本,冒泡事件支持的层级达到document对象。
(2)在firefox(准确的说应该是Mozilla1.0以及更高版本),对冒泡事件的支持一直上升到window窗口对象。
于是就造成了上面事件响应结果的不同。
*在冒泡过程中。DOM事件模型的最独特的性质是,文本节点也触发事件(在IE不会)
IE不支持事件捕获
6.事件绑定在不同浏览器
Mozilla中:
addEventListener的使用方式:
target.addEventListener(type, listener, useCapture);
target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。
useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
IE中:
target.attachEvent(type, listener);
target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);});
W3C 及 IE 同时支持移除指定的事件, 用途是移除设定的事件, 格式分别如下:
W3C格式:
removeEventListener(event,function,capture/bubble);
Windows IE的格式如下:
detachEvent(event,function);
7.GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
8.string的slice比substring方法灵活,可传入负数(从末尾开始),返回一个新string不改变原值
而array的splice则会改变原值
2.原型方法和类方法的区别
1.js中有5种数据类型:undefined、null、boolean、number和string。
还有一种复杂的数据类型object,object本质是一组无序的名值对组成的。
*js大小寫敏感,Object,String 都是function類型
2.函数内参数传递,对象引用传递,基本类型值传递
function setName(obj) {
obj.name = "simon";
obj = new Object();
obj.name = "lemon";
}
var person = new Object();
setName(person);
alert(person.name);//simon
-----------------------------
function setValue(b) {
b = 133;
}
var a = 10;
setValue(a);
alert(a);//10
3.js中this
1)纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。 (window)
2)作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
3)作为构造函数调用
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
4)apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
4.json和jsonp区别
一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;
现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>);
客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。
为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
5.ajax/事件冒泡在不同浏览器区别
ajax:
不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象。
事件冒泡:
由于IE浏览器以及Firefox对于冒泡型事件的支持层次不同造成的。
(1)在IE 6以及后续版本,冒泡事件支持的层级达到document对象。
(2)在firefox(准确的说应该是Mozilla1.0以及更高版本),对冒泡事件的支持一直上升到window窗口对象。
于是就造成了上面事件响应结果的不同。
*在冒泡过程中。DOM事件模型的最独特的性质是,文本节点也触发事件(在IE不会)
IE不支持事件捕获
6.事件绑定在不同浏览器
Mozilla中:
addEventListener的使用方式:
target.addEventListener(type, listener, useCapture);
target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。
useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
IE中:
target.attachEvent(type, listener);
target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);});
W3C 及 IE 同时支持移除指定的事件, 用途是移除设定的事件, 格式分别如下:
W3C格式:
removeEventListener(event,function,capture/bubble);
Windows IE的格式如下:
detachEvent(event,function);
7.GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
8.string的slice比substring方法灵活,可传入负数(从末尾开始),返回一个新string不改变原值
而array的splice则会改变原值
2.原型方法和类方法的区别