JavaScript理论知识

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有什么区别?

参考文章:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4#rd

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脚本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章