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("("+字符串+")");

浙公网安备 33010602011771号