1、JavaScript的数据类型有哪些?
ECMAScript类型:string number boolean undefined object null
typeof类型:string number boolean undefined object function
2、什么是事件冒泡?如何阻止事件冒泡?
事件冒泡:事件从目标源开始由里到外一层层的向上查找
阻止事件冒泡:e.stopPropagation()=>标准浏览器;e.cancelBubble=true;=>IE浏览器
3、比较变量是否相等时,==和===有什么区别?
==:比较时,只要两个比较元素的数值相同就返回true;
===:比较时,两个比较的元素的数值、类型都相同的情况下才会返回true
4、ajax的请求过程,以及异步请求的优缺点
1>、原生JavaScript请求过程:
- 创建XMLHTTPRequest请求对象;
- 使用open方法设置和服务器的交互信息;
- 设置发送的数据,开始和服务器端交互;
- 注册事件;
- 更新界面;
2>、ajax的优点:
- 无刷新更新数据:可以在不刷新页面的前提下与服务器通信,减少用户等待时间;
- 异步与服务器通信:不需要打断用户的操作,优化了Browser和Server之间的沟通,减少不必要的数据传输、时间,降低网络数据流量;
- 前端和后端负载平衡:把服务器的部分工作转嫁到客户端,减轻服务器负担,减少请求和响应对服务器造成的负担,提升站点性能;
- 界面与应用分离:数据与呈现分离,有利于分工合作、减少非技术人员对页面的修改造成的WEB应用程序错误、提高效率,也更加适用于现在的发布系统;
3>、ajax的缺点:
- 破坏了浏览器机制:点击浏览器的后退按钮无法取消上一步操作,用户无法回到前一个页面状态;
- ajax的安全问题:会暴露数据和服务器逻辑,ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击;
- 对搜索引擎支持较弱:使用不当,ajax会增大网络数据的流量,从而降低整个系统的性能;
- 破坏程序的异常处理机制;
- 客户端代码过多,造成开发上的成本:编写复杂、容易出错;冗余代码比较多;破坏了Web的原有标准;
function getXMLHttpRequest() {
var xhr;
if(window.ActiveXObject) {
xhr= new ActiveXObject("Microsoft.XMLHTTP");
}else if (window.XMLHttpRequest) {
xhr= new XMLHttpRequest();
}else {
xhr= null;
}
return xhr;
}
function save() {
var xhr = getXMLHttpRequest();
xhr.open("post","url");
var data = "name=mikan&address=street...";
xhr.send(data);
xhr.onreadystatechange= function() {
if(xhr.readyState == 4 && xhr.status == 200) {
alert("returned:"+ xhr.responseText);
}
};
}
5、document.write()和innerHTML的区别是什么?
- document.write():指向窗口输出,直接输出在浏览器中,内容会一直在后边添加;每次重新调用该函数的时候,页面会被重写;
- innerHTML:是DOM元素的一个属性,代表该元素的HTML内容;
6、window.location.href和window.location.replace的区别是什么?
二者最主要的区别就是回退的时候返回的页面不一样
- window.location.href(“页面地址b页面”):从a页面跳转到B页面之后,点击浏览器的后退按钮时,可以返回到a页面;会向服务器发送请求;
- window.location.replace(“页面地址b页面”):这个方法是用a页面替代了b页面,点击浏览器的后退按钮时,页面无法返回到a页面,返回的是进入a页面之前的那个页面;不会向服务器发送请求;
7、请问HTTP中的get和post有什么区别?
8、事件绑定和普通事件的区别
普通事件只支持单个事件,普通事件绑定多个相同事件只会执行最后一个事件,前边绑定的事件会被覆盖;而事件绑定可以绑定多个事件,会按照事件绑定的顺序依次执行。
<div id="div">点击</div>
<script>
var btn = document.getElementById("div");
//使用.onclick绑定事件的时候,只会输出2
div.onclick = function(){
console.log("1");
}
div.onclick = function(){
console.log("2");
}
//使用addEventListener绑定事件的时候,会输出1,2
btn.addEventListener("click", function(){
console.log("1");
})
btn.addEventListener("click", function(){
console.log("2");
})
</script>
9、call和apply的区别
在JavaScript中,call()方法和apply()方法都是为了改变函数运行时上下文而存在的,也就是为了改变函数体内部 this 的指向。
二者的区别就是接收的参数不同
- call(this,arg1,arg2,arg3…)方法:第一个参数指的是改变上下文的this指向;其余参数以逗号分隔的方式传过去;
- apply(this, arr)方法:接收两个参数,第一个参数表示的是在其中运行的作用域,第二个参数表示的是一个数组或者是arguments对象;
10、HTTP状态码有哪些?分别代表什么?
100:客户端继续发送请求
200:表示请求已经发送成功,响应头信息会随着响应返回
201:请求已经实现,资源建立
202:服务器已经接收请求
304:Not Modified,表示设置了缓存(参考链接:http://blog.csdn.net/gfangxiong/article/details/7420691)
400:a、语义有误,表示当前请求无法被服务器理解;b、表示请求参数有误
404:表示请求失败,服务器上未找到资源
405:请求行中指定的请求方法不能被用于请求相应的资源
500:服务器出现问题,导致无法完成对请求的处理
11、异步加载的方式
1>、通过ajax请求来实现异步加载;
2>、调用onload方法实现异步加载;
3>、通过Promise来实现异步加载
12、创建一个对象
1>、object创建对象
object对象是JS自带的对象,可以直接使用
var obj = new Object();
obj.name = "xxx";
console.log(typeof obj);//执行结果为object
2>、使用{}方式创建对象
var obj = {name:"xxx",age:21}
;
3>、 使用工厂方式创建对象
function Person(name){
var obj = new Object();
obj.name = name;
obj.init = function(){}
return obj;
}
var p = Person("xxx");
p.init();
描述:在使用工厂方式创建对象时,在函数内部必须将该对象返回出来,这样在调用该函数时,才可以使用该函数的方法和属性,使用该方式创建对象时,this指的就是window对象 。
4>、使用构造函数创建对象
function Person(name,sex){
this.name = name;
this.sex = sex;
this.init = function(){alert(this.name);}
//(此时就不需要在添加返回值)
}
var p1 = new Person("lala","nv");//使用这个方式创建出来的对象类型是function函数类型
p1.init();
描述:使用构造函数创建对象时,this指的就是通过该函数实例出来的对象,并且在创建对象时,必须使用new关键字来创建,只有使用new创建的函数才是构造函数;只要没有使用new关键字创建的函数就是一个普通函数,此时调用该函数的对象就是window对象
在使用构造函数创建对象时,new关键字的存在会在该函数内部创建一个空对象,并且将this指向该空对象,函数执行借宿之后就会返回这个空对象,然后this就会指向该函数实例化出来的对象。
13、谈谈对this的理解
this表示的上下文对象是一个html的DOM对象,可以调用对象的属性。
在函数被调用的时候,谁调用这个函数,this指的就是谁;
14、3种强制类型转换和2种隐士类型转换
3种强制类型转换:String() Number() Boolean()
2种隐式类型转换:+ - * 、
15、split和join的区别
split():字符串方法,将字符串按照指定的规则转换成数组;
join():数组方法,将数组按照指定的规则拼接成字符串;
16、原生JS的window.onload和jQuery的$(document).ready(function(){})有什么区别?如何使用原生JS实现jQuery的ready方法
原生JS的window.onload:在页面所有元素包括图片等全部加载成功之后才会执行;
jQuery的$(document).ready(function(){}):在页面的DOM结构加载完成之后就可以执行;
17、JavaScript中的3种弹出式消息提醒的命令是什么?
- alert():带确认按钮的对话框,点击确认按钮,对话框关闭;
- confirm():带有确认和取消按钮的对话框,点击确认和取消按钮都会关闭对话框,只是会返回不同的boolean值,然后可以根据boolean值执行不同的操作;
- prompt():带有确认和取消按钮,还带有输入框
18、简述浏览器的同源策略
同源指的就是协议、域名和端口都相同;
同源策略对javascript代码能够访问的内容做了很重要的限制,只能访问与他包含的文档在同一域下的内容。
19、请描述一下cookies、sessionStorage和localStorage的区别?
参考地址:http://blog.csdn.net/mengStudents/article/details/78581184
20、解释jsonp的原理,以及为什么不是真正的ajax?
jsonp的原理:动态的创建script标签,通过script标签的src属性来实现跨域,用户传递一个callback参数给服务端;然后服务端返回数据时会将这个callback参数作为函数名来包裹住json数据,这样客户端就可以随意定制自己的函数来自动处理返回数据
为什么不是真正的ajax:ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>
标签来调用服务器提供的js脚本。