Array.prototype.uniq=function(){
	var h={};
	var tostr=function(obj){
		if(typeof obj == "object"){
			var str="";
			for(var p in obj){
				str+=p+":"+arguments.callee(obj[p]);
			}
			return "{"+str+"}";
		}
		return obj;
	}
	for(var i=0,h={},l=this.length,r=[]; chk=tostr(this[i]),i<l; i++){
		if(!h[chk]===true)r.push(this[i]);
		h[chk]=true;
	}
	return r;
}

// -------------------

var a=[1,2,[3,4],6,2,3,{},{},[4,3]
	,function(){},function(a){},function(){},function(){return this;}
	,{"a":"test1"}
	,{"a":"nest","b":{"c":"nest2"}}
	,{"a":"nest2","b":{"c":"nest3"}}
	,{"a":"nest","b":{"c":"nest2"}}
	,{"a":"test1"}
	,{"a":"test3"}
	,[5,12,4],[4,3],[5]
];
a.uniq();

//[1, 2, [3, 4], 6, 3, Object, [4, 3], function(), function(), function()
//, Object a=test1, Object a=nest b=Object, Object a=nest2 b=Object, Object a=test3
//, [5, 12, 4], [5]]