日期:2014-05-16 浏览次数:20443 次
前些时间看了<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);
}