日期:2014-05-16 浏览次数:20389 次
前些时间看了<JavaScript 权威指南>,信手翻了一下,算是笔记吧
function funLoad() { var str = "69 66 20 79 6F 75 20 63 61 6E 20 72 65 61 64 20 74 65 69 73 20 77 65 20 77 61 6E 74 20 79 6F 75"; str = str.replace(/ /g, ""); var result = "" for (var i = (str.substr(0, 2) == "0x") ? 2 : 0; i < str.length; i += 2) { result+=(String.fromCharCode(parseInt(str.substr(i, 2), 16))); } alert(result); } //cook 的读写 function usrCookie(){ var useDate = new Date(); useDate.setMonth(useDate.getMonth() + 1); document.cookie = "testCookie="+ escape("火星人哎")+";expires="+useDate.toGMTString()+";path=/";//espires 过期时间,domain 用于同源策略 document.cookie = "testCookie1="+ escape("你好 very good!")+";expires="+useDate.toGMTString();//escape 用于字符编码 alert(unescape(document.cookie));//unescape 用于反escape编码 } //replace function usrReplace(){ var quote = /"([^*]*)"/g; alert("go\" you \"od".replace(quote,"\@$1\@"));//这里$1 用来表示第一个()区配 } //数组的使用 function usrArray(){ var temp = null;//javaScript 中没有块定义,定义在这里和for 中无区别 var array = [1,2,"hello"]; array.length = 10;//对象没有length 属性,这是数组和对象的区别 alert("array lenght "+ array.length);//定义数组长度 array[20]="world";//20以前空置 alert("array lenght "+ array.length);//这说明根据下标访问不一定可靠 array["good"]="good";//这里good 是做为属性使用的 for(temp in array){ alert(array[temp]); } array.length = 2;//这里截断了数组(因为good 是属性,因此仍存在) for(temp in array){ alert("second "+array[temp]); } } //constructor 对象的构造方法 function usrObjType(){ var obj = new Date(); if(typeof obj == "object" && obj.constructor == Date){//typeof 和 constructor 的使用 alert("this Date Object!"); } } //对象方法 function userObjFun(){ function Obj(){}; Obj.prototype.goString =function(){alert("goString!")};//属性方法定义 Obj.disString=function(){alert("disString");}//类方法定义 Obj.disString();//类方法使用 new Obj().goString();//属性方法使用 } //"继承"属性 function userObj(){ var Alert1 = function(){alert("zx");} var Obj = function(){} Obj.prototype.tempVal = Alert1;//函数才有 prototype 属性,这里操作的是Obj 类 var newObj = new Obj(); Alert1.display=function(){alert("display")} Obj.name ="good";//这里操作的是 Obj,区别 prototype newObj.tempVal.display();//protptype 定义了原生类,这里是引用,不是副本 alert(Obj.name); } //使用属性 function userObjAttr(){ var obj = new Object(); obj.name = "good"; obj.sex = "男"; for(var temp in obj){ alert("ojb."+temp + " : " + obj[temp]);//for 读取属性值 if(temp == "sex"){ delete obj[temp];//delete 删除属性(delete obj.sex;) } } for(var temp in obj){ alert("Second ojb."+temp + " : " + obj[temp]);//for 读取属性值 } } //arguments的使用 function useArgu(x,y,z){//可以传递任意数量的参数 alert("argument[1]:"+arguments[1]);//arguments 类似数组,存放传入参数 if(arguments.length > 2){ arguments.callee(arguments[0],arguments[1]);//callee 用来引用当前函数 } } //函数直接量的使用 function useFun(){ var f = function funX(count){ alert("userFun.f.funX="+count) if(count > 0){ funX(--count);//注意这里可以正常回调 } } f(2); alert("over---------"); try{ funX(2);//这里出错,原因是 函数直接量 是匿名函数,funX 只是为了方便方法体回调 }catch(e){ alert("error:" + e) } } //with 的使用(不建议使用) function useWith(){ with(document.getElementById("aTag")){ alert(name); alert(href); } } // try 捕捉异常 function useTry() { try { createError(); } finally { throw new Error("useTye run finally Error throw!");// 在这里finaly 中的Error // 代替了 之前的Error } /* * finally 中return try { createError(); } finally { return * false;//当前return否定了Error返回false } */ /* * 使用过程 try{ createError(); }catch(e){ alert(e); }finally{ alert("useTye run * finally."); } */ } // 抛出一个异常 function createError() { throw new Error("CreateError run Error throw!"); } //lable 在break,continue 上的用法 function createBreak() { alert(1); var i = 0; alertBreak: // 标记要退出的循环 for (i = 0; i < 4; i++) { alert(i); break alertBreak;// 跳出 alertBreak 指定的循环 } alert(4); }