javascript

javaScript使用方式:
1.<script></script>或者<script language="javascript"></script>
  <script src="文件" language="javascript"></script>
  <a href="javascript:alert(new Date());">javascript</a>
2.可以$做变量标示,约定行代码以分号结束,可以没有分号,区分大小写
3.  // 单行注释
    /**/多行注释
4. 变量用var声明;
   不用var就是全局变量;
5.Number
 整型:
 十六进制:以0x或0X开头,0X8a
 八进制:以0开头,0123
 十进制:第一位不是0,0除外
 实型:
 加小数点
 
 特殊数值:NaN,Infinity,isNaN(),isFinite()
  Boolean
 true,false
  String
 字符串:'abc',"abc",特殊字符用户\转义,如\t
  null
  undefined:未定义,没有值
6.运算符:同java,注意=和==,if(i=50){}会永远执行,编译器不会报错,注意使用==而不是=
   注意:||返回第一个不为false的值或者最后一个值,var a=100;var b=0;var c=a || b,返回c=100
         逻辑运算中0,"",false,null,undefined,NaN都表示false
     
7.条件语句:
 if...else,switch
8.循环:
 while,do...while,for,break,continue;
9.函数:
     function 函数名(参数){ return 值;}//参数不需要类型,可以没有return
  function t(e){};var s=t;s是函数的内容,s();执行函数
10.全局函数:alert();encodeURI,decodeURI,parseInt,isNaN,escape,unescape,eval
 注意:parseInt(555dd);转换为555,从第一个数字开始到第一个不可以转换的字符为止
  eval;将参数字符串转换为javascript表达式执行
11.javascript对象:Object
     var obj=new Object();obj.sayHello=function(){};obj.msg="";
     
     Number:toFixed,toString,...
       toString(2)转换二进制
     var n=new Number(123);var n=123;
     
     String:link,anchor,big,bold,fontcolor,charAtconcaat,indexOf,lastIndexOf,replace,split,substr,subString
     
     Math:静态类,random
     
     Date:getFullYear
12.with
 with(object){直接调用对象方法,属性};
13.数组:jion,push,reverse,sort
 var arr=["1","2",123];
14.window
 window.moveTo
 window.resizeTo
 window.resizeBy
 IE:window.screenLeft,window.screenTop
 
 FireFox:window.screenX,window.screenY
 window.onload=functon(){};
 
 window.open()
 window.close()
 self.close()
  属性:opener(打开窗口者)
   setTimeout(fn,time)
   setInterval(fn,time)
   clearTimeout(time)
   clearInterval(time)
 注意:所有对象默认都是在window下面,可以使用window.对象名
15.history:window.history
16.document:window.document
17.location:窗口位置信息
            window.document,document.location
18.navigator:浏览器信息
19.screen:屏幕信息 

20.document:
   document.body:获取body节点(浏览器都实现的和document.documentElement.getElement("body"))
   documentElement:根节点
   nodeName:节点名称
   nodeValue:文本值
   nodeType:节点类型:节点,属性节点,文本节点(分别值为:1,2,3)
   firstChild:
   lastChild:
   parentNode:
   childNodes:
   previousSibling:
   nextSibling:
   ownerDocument:
   attribute:
   
   hasChildNodes()
   appendChild(node)
   removeChild(node)
   replaceChild(oldNode,newNode)
   insertBefore(newNode,refNode)
   
   createElement(tagName);
   createTextNode(text);
   
   HTML页面中添加节点是,每执行一句添加都会造成页面刷新,采用下面这个创建代码片段,最后一次加载到页面
   var fragement=createDocumentFragment();
   fragement.appendChild("p");
   document.body.appendChild(fragement);
   
   
   访问属性:
   var c=document.getElementsByTagName("p")[0];
   c.getAttribute("src");
   c.setAttribute("src",value);
   或者
   c.src
   c.className(class属性是特殊的,必须用className,其他的不行)
   
style:所有节点都有这个属性
  div1.style=new Object();这种写法错误,不能给style赋值,因为style是默认就有值的,不能重新赋值
  var style=div1.style;
  style.backgroundColor="red"或者style["backgroundColor"]="red"(background-color,所有-号去掉,后面接的字母大写)
  
表格:
 表格节点对象的属性:
 caption:
 tBodies:数组
  rows:数组
  deleteRow(position):
  insertRow(position):
 
 tFoot:
 tHead:
 rows:
  cells:
  deleteCell(position):
  insertCell(position):
 createTHead():
 createTFoot():
 createCaption():
 deleteTHead():
 deleteTFoot():
 deleteRow(position):
 insertRow(position):
============================================================================================================   
事件驱动:
<p onclick="shout(event);"></p>或者:window.onload=function(){window.document.getElementById("p1").onclick=shout}
js:function shout(e){//onclick不传参数,默认会传事件对象
 alert(e);//只有一个参数,onclick传event对IE有效,第一个参数是firefox默认的事件对象参数
 alert(event);//参数名不是event,对于IE来说,event是默认的事件对象名,所以不报错
 兼容:e=e||event//当onclick传参数不是event
}
 事件源:
 时间名称:
  onclick
  onmouseover
  onmouseout
  onkeypress:普通字符
 事件对象:
  IE:事件对象是Event
  firefox:事件是参数中的第一个
  兼容方式:e=e||event;
 attachEvent("onclick",fn);//IE
 detachEvent("onclick",fn);
 addEventListener("onclick",fn);//firefox,IE 9.0
 removeEventListener("onclick",fn);
 兼容:
 if(document.attachEvent){
  attachEvent("onclick",fn);//IE
  detachEvent("onclick",fn);}
 else{
  //IE可以用onclik,fire可以用click
  addEventListener("click",fn);//firefox,IE 9.0
  removeEventListener("click",fn,false);//false:不向上向下传播
 }
 阻止事件:
 兼容:e=e||event;
 preventDefault();//firefox
 event.returnValue=false;//IE
 
 例如:
   window.onload = function(){
           //去掉默认的contextmenu事件,否则会和右键事件同时出现。
           document.oncontextmenu = function(e){
               e.preventDefault();
           };
           document.getElementById("test").onmousedown = function(e){
               if(e.button ==2){
                   alert("你点了右键");
               }else if(e.button ==0){
                   alert("你点了左键");
               }else if(e.button ==1){
                   alert("你点了滚轮");
               }
           }
       }
   
键盘事件:
 keydown,keypress,keyup执行三个事件(普通键)
 keydown,keyup执行两个事件(功能键)
==========================================================================================
函数:
 1.没有重载的概念,可以实现可变参数:函数中都有一个内置参数数组arguments
   可以通过for(var i=0;i<arguments.length;i++){s+=arguments[i]}
 2.函数也是一种特殊的对象
  方式一: var s1=function(){return 123;}
  对象的构造函数:constructor
  s1.constructor
  对象的类型:typeof
  typeof s1
 例子:if(typeof s1=="Object" && s1.constructor==Array)
  方式二: var s2=new Function("alert(123)");
  s2();
  方式三:function f(){}
 3.闭包
  function f1(){
   var s=0;
   function f2(){
    s++;
    }
   return s;
  }
 var f3=f1;
 f3();
    4.作用域:
  function b(d,r){alert(this.v);};
  var b1={v:"this is b1"};
    调用:b();//输出undefined
    window.b();//输出undefined
    b.call();//call的第一个参数表示函数上下文呢
    如:b.call(b1);//给函数绑定一个对象
     b.call(b1,"123","12345");
    b.apply(b1);
    b.apply(b1,["123","12345"]);//与call的差别,第二个参数是数组
  扩展:var b2={v:"this is b2",sayHello:function(){alert(this.v)}}
   b2.sayHello();
   b2.sayHello.call(b1);
对象:
 1.属性的引用:
  b.v="123";或者
  b["v"]="123";
 for...in:for(var key in b){alert(b[key])}//key是属性名称
 delete:删除对象或对象中的属性
  delete b.v;
 2.类扩展:prototype:所有类都有一个属性prototype
   在prototype上加一个方法,这个方法就可以用于所有类的对象
   Number.prototype.add=function(b){return this+b;}
   例子:var b=new Number(5);
       alert(b.add(100));//报错
       Number.prototype.add=function(b){return this+b;}
       alert(b.add(100));//输出105,先从b里面找add方法,再在prototype属性中找
 3.创建对象:函数以new的形式调用,就是创建对象,调用构造函数
    function Animal(name){
     this.name=name;
     this.age=0;
     this.sayHello=function (){
     alert(this.name+":"+this.age);
     }//方法尽量写在外面,用prototype属性增加方法,如果要访问局部变量,必须放在Animal方法里面,形成闭包
    }
   var animal=new Animal("cat1");
   Animal.prototype.sayHello2=function(){alert(this.name);}//只能访问类变量
 4.继承:
  function classA(name){}
  function classB(){
      //方式一:
      this.newMethod=classA;
                    this.newmethod();
        delete this.newMethod;
        //方式二:
        classA.call(this,name);
        或者classA.apply(this,[name]);
        }
      //方式三:function
      classC.prototype=new classA(name);
      var objb=new classB();
==================================================================================
ajax:
 var xhr=new XMLHttpRequest();//firefox
 var xmlhttp=new ActiveXObject();//IE 6.0


 //兼容IE,Firefox 
 function   createXmlHttpRequest(){
 var xmlhttp = null;
 try{
  //Firefox, Opera 8.0+, Safari
           xmlhttp=new XMLHttpRequest();
  }catch(e){//IEIE7.0以下的浏览器以ActiveX组件的方式来创建XMLHttpRequest对象
 var MSXML =
 ['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0',
 'MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0',
 'MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
 for(var n = 0; n < MSXML.length; n ++){
  try{
  xmlhttp = new ActiveXObject(MSXML[n]);
  break;
  }catch(e){}}
 }
  return xmlhttp;
 }
 
利用XMLHttpRequest 实例与服务器进行通信包含以下3个关键部分:
 onreadystatechange 事件处理函数
 open 方法
 send 方法
 
    属性:readyState:
     0:未初始化
     1;读取中
     2:以读取
     3:交互中
     4:完成
   responseText:服务器进程返回数据的文本版本
   responseXML:服务器进程返回数据的兼容DOM的XML文档对象
   status:服务器返回的状态码,404,405,500,304,200
   statusText:服务器返回的状态文本信息

readyState 属性表示Ajax请求的当前状态。它的值用数字代表。
0 代表未初始化。 还没有调用 open 方法
1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
2 代表已加载完毕。send 已被调用。请求已经开始
3 代表交互中。服务器正在发送响应
4 代表完成。响应发送完毕
每次 readyState 值的改变,都会触发 readystatechange 事件。如果把 onreadystatechange 事件处理函数赋给一个函数,那么每次 readyState 值的改变都会引发该函数的执行。
readyState 值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把 readyState 的值统一设为 4
   
status
服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。
常用状态码及其含义:
404 没找到页面(not found)
403 禁止访问(forbidden)
500 内部服务器出错(internal service error)
200 一切正常(ok)
304 没有被修改(not modified)(服务器返回304状态,表示源文件没有被修改 )
在 XMLHttpRequest 对象中,服务器发送的状态码都保存在 status 属性里。通过把这个值和 200 或 304 比较,可以确保服务器是否已发送了一个成功的响应

responseText
XMLHttpRequest 的 responseText 属性包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。
当 readyState 属性值变成 4 时, responseText 属性才可用,表明 Ajax 请求已经结束。

xmlHttpReq.onreadystatechange=function(){
 if(xmlHttpReq.readyState==4){
  if(xmlHttpReq.status==200||xmlHttpReq.status==304){
   alert(xmlHttpReq.responseText);
   }
  }
 }
responseXML
如果服务器返回的是 XML, 那么数据将储存在 responseXML 属性中。
只用服务器发送了带有正确首部信息的数据时, responseXML 属性才是可用的。 MIME 类型必须为 text/xml

指定当服务器返回信息时客户端的处理方式。只要将相应的处理函数名称赋给XMLHttpRequest对象的onreadystatechange属性就可以了.比如:
        XMLHttpReq.onreadystatechange = processResponse;
注意:这个函数名称不加括号,不指定参数。也可以用Javascript函数直接量方式定义响应函数。比如:
       XMLHttpReq.onreadystatechange = function() { };


   
open(method, url, asynch)
XMLHttpRequest 对象的 open 方法允许程序员用一个Ajax调用向服务器发送请求。
method:请求类型,类似 “GET”或”POST”的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用GET(可以在GET请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为2000个字符)。若需要向服务器发送数据,用POST。
在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个URL。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加到URL的最后,就能确保URL的惟一性,从而避免浏览器缓存结果。


url:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。
asynch:表示请求是否要异步传输,默认值为true(异步)。指定true,在读取后面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点时,会停下来,一直等到Ajax请求执行完毕再继续执行。

send(data):
open 方法定义了 Ajax 请求的一些细节。send 方法可为已经待命的请求发送指令
data:将要传递给服务器的字符串。
若选用的是 GET 请求,则不会发送任何数据, 给 send 方法传递 null 即可:request.send(null);
当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null.

setRequestHeader(header,value)
当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是 GET 还是 POST。
Ajax 请求中,发送首部信息的工作可以由 setRequestHeader完成
参数header: 首部的名字;  参数value:首部的值。
如果用 POST 请求向服务器发送数据,需要将 “Content-type” 的首部设置为 “application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合URL编码了。
该方法必须在open()之后才能调用


eval:
 var json=eval("("+字符串+")");

posted @ 2016-05-29 20:22  Runny_Hao  阅读(73)  评论(0)    收藏  举报