日期:2014-05-16  浏览次数:20372 次

JavaScript 随手小记

前些时间看了<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);
}