Javascript_绝对简明手册1.序言现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉.2.准备设置服务器*.xml的MIME为text/xml,WindowsXp自带的IIS的设置如下图js_0000.pngFirefox上有许多插件是开发必备的,用法大家Google,我列一下名称FireBugWebDeveloperToolbarGreaseMonkey和XmlHttpRequestDebuggingHtmlValidator另外建议安装一下DreamWaver和EditPlus.EditPlus中可以快速切换IE和Js脚本,快捷键Ctrl+B强烈建议学习时便学边调试3.如何嵌入网页?3.1.写在网页中scripttype=text/javaScript//代码/script3.2.在链接上使用伪协议ahref=javascript:voidwindow.open();Open/a3.3.使用独立的js脚本scriptlanguage=javascriptsrc=/js/dialog.js/4.语言核心4.1.关于分号javascript的分号是选加的,如果不加,javacript会在换行处自动加上分号.但是,建议你不要省略分号,理由如下加了分号的代码可以用软件压缩,来节省带宽(附带效果是加密你的Js代码:))(Ajax基础教程上的理由)良好的编程习惯(Javascript权威指南上的理由)4.2.输出Html最简单的方式见例子1_1doucment.write(HelloWorld);4.3.alert:弹出窗口,调试必备见例子1_2alert(弹出窗口,调试必备);4.4.命名规则Page1Javascript_绝对简明手册区分大小写,开头必须是字母或$或_4.5.基本类型4.5.1.字符串使用Unicode字符,如test'name=zsp'//双引号可以放在单引号中,反之亦然'You\'reright'//转义字符,和C++的转义相同字符串的属性str=zsp007@gmail.comstr.length//字符串的长度str.charAt(str.length-1)//字符串的最后一个字符(注意,第一个字符的索引是0,和C++数组类似)str.indexOf(@)//第一个@字符的位置str.substring(str.lastIndexOf(.)+1,str.length);//提取后缀com,提取规则是左开右闭(就是包括左边参数所代表的元素,而不包括右边的)str.toUpperCase();//返回大写形式4.5.2.十六进制0xff//15*16+15=255,0x为十六进制前缀4.5.3.浮点-3.146.02E-23//6.02X10-23(10的负23次方)4.5.4.特殊常量Infinity无穷大Number.POSITIVE_INFINITY正无穷大Number.NEGATIVE_INFINITY负无穷大NaN或Number.NaN非法的值Number.MAX_VALUE可表示的最大值Number.MIN_VALUE可表示的最接近0的值4.5.5.布尔值Page2Javascript_绝对简明手册true==1false==04.5.6.基于对象4.5.6.1.创建方式1:varo=newObject();o.x=2.3;o.y=-1.2;方式2:varo={x:2.3,y:-1.2};调用ox//返回2.3一个复杂点的例子见例子1_3varpoint={x:2.3,y:-1.2};varside=4;varsquare={upperLeft:{x:point.x,y:point.y},lowerRight:{x:(point.x+side),y:(point.y+side)}};alert(square[upperLeft][x]);//显示2.3备注:内建类型字串不是Object(),即用typeof得到的是string,和object不等价,但在任何需要的地方他会自动转化为一个String对象4.5.6.2.构造函数functionRectangle(w,h)//构造函数.不要返回值,因为返回值会使this失效{this.width=w;this.height=h;}varrect1=newRectangle(2,4);//创建对象4.5.6.3.成员函数functionRectangle_area(){returnthis.width*this.height;}//声明函数functionRectangle(w,h){this.width=w;this.height=h;this.area=Rectangle_area;//关联函数为成员函数}varr=newRectangle(3,2);r.area();//返回64.5.6.4.继承Page3Javascript_绝对简明手册Javascript的类都自动继承了原型对象Object.prototype继承的属性为只读的,既子类不可以给继承的属性赋值子类的同名属性/函数将覆盖父类的同名属性/函数String和Date等内部类也有原型对象//定义一个父类functionComplex(real,imaginary){this.x=real;this.y=imaginary;}//为父类添加一个方法,通过定义父类原型prototype的函数//该方法同时覆盖了Object.prototype中的同名函数Complex.prototype.toString=function(){returnthis.x+++this.y+j;}//定义一个Complex函数,该函数不会被继承(这时不要加this了)Complex.magnitude=function(){returnMath.sqrt(x*x+y*y);}//定义一个子类functionMoreComplex(real,imaginary){this.x=real;this.y=imaginary;}//继承父类,注意这时MoreComplex的构造函数被父类的构造函数覆盖MoreComplex.prototype=newComplex(0,0);//明确指定,使MoreComplex使用自己的构造函数MoreComplex.prototype.constructor=MoreComplex;//定义子类自己的函数MoreComplex.prototype.swap=function(){vartmp=this.x;this.x=this.y;this.y=tmp;}a=newMoreComplex(11,33);alert(a);//自动调用Complex.toString()a.swap();alert(a);4.5.6.5.公共基类的属性Object.prototype是所有类的公共基类Page4Javascript_绝对简明手册constructor属性构造器,由于构造函数确定了一个对象的类型,可以用如下代码确定一个对象的类型if((typeofo==object)&&o.constructor==Date)//...........但不能保证constructor属性总是存在,类的创建者可以指定一个对象来取代原型的构造器,而指定的对象可以没有constructor(PS:此句抄书,我看不懂)toString()返回一个字串,内容为对象的值或类型.默认的toString对于对象返回[objectclass]//class为类名,如自定义对象为Object//类似的还有Array,Function,Date,Math,Error,Window,Document,Form由于可以重载toString.所以,如果你想明确的调用默认的toString来获得类型信息,你可以这样Object.prototype.toString.apply(x);toLocaleString()Object默认的toLocaleString返回值和toString相等;Array,Date,Number都绑定了自己的toLocaleStringvalueof()Object默认定valueof不执行任何转换,Number和Boolean等有自定义的valueof().当你自定义了valueof时需要注意的是:valueOf()优先级比toString()高,所以,你常不得不明确的调用toString()hasOwnProperty()varo=newObject();o.hasOwnProperty(undef);//false:没有定义该属性o.hasOwnProperty(toString);//false:该属性是继承的Math.hasOwnProperty(cos);//true:Math有cos属性*propertylsEnumerable()一个属性如果可以由for...in循环枚举出来就返回true,否则,返回falsevaro={x:1};o.propertylsEnumerable(x);//trueo.propertylsEnumerable(y);//false,无该属性o.propertylsEnumerable(valueOF);//false,该属性不可枚举isPrototypeOf()调用该函数的对象如果是参数的原型,就返回truevaro=newObject();Object.prototype.isPrototypeOf(o);//true,o.constructor==ObjectObject.isPrototypeOf(o);//falseo.isPrototypeOf(Object.prototype);//falseFunction.prototype.isPrototypeOF(Object);//true:Object.constructor==Function4.5.7.数组4.5.7.1.创建方式1vara=newArray();a[0]=2;a[1]=I'maearthman.a[2]=true;a[3]={x:1,y:3}方式2Page5Javascript_绝对简明手册vara=newArray(2,I'maearthman.,true,{x:1,y:3});vara2=newArray(10);//注意,这个10是表示a有10个未定义元素!(因为这时候只传给Array一个参数)方式3vara=[2,I'maearthman.,true,{x:1,y:3}];vara2=[[1,2,3],[1,2,3]];//可以嵌套varbase=11;vara3[base,base+1,base+2];//可以为变量vara4=[1,,,,5];//有3个未定义的元素4.5.7.2.数组的函数*join()把所有的元素转换为字串,参数作为分隔符(默认分隔符是,)vara=[1,2,3];a.join();//1,2,3a.join(:);//1:2:3*reverse()对数组反向排序*sort()默认按照UTF-8码的顺序排序,可以传一个参数,如果返回一个小于等于0的数,第1个参数出现在第2个参数前面,反之同理.functionrandOrd(){return(Math.round(Math.random())-0.5);}anyArray=newArray('3','a','5','F','x','47');anyArray.sort(randOrd);//把数组乱序排列*concat()返回一个数组,包含了原数组和参数anyArray=newArray(47,33);anyArray.concat(8,99,88);//[47,33,8,99,88]anyArray.concat([8,99],[88,53]);//[47,33,8,99,88,53],会自动把参数中数组拆包一层anyArray