1. 计算字符串中某个字符的个数
var aaa='1231011211009181';
function count(str){
var arr=[];
for(var i=0;i if(str.charAt(i)=='1'){ arr.push(str.charAt(i)); } } return arr.length; } console.log(count(aaa)); 2.数组去重 var arr=[1,1,1,2,2,1,3,1,3,4,5,6]; function arrDel(arr){ var result=[], obj={}; for(var i in arr){ if(!obj[arr[i]]){ //判断对象的属性 result.push(arr[i]); obj[arr[i]]=1; } } return result; } console.log(arrDel(arr)); 3. 数组冒泡排序 function bubbleSort(arr){ for(var i=0;i for(var j=i+1;j //获取前一个值和后一个值进行比较 if(arr[i]>arr[j]){ //创建中间变量 交换值 var cur=arr[j]; arr[j]=arr[i]; arr[i]=cur; } } } return arr; } 4.数组快速排序 function quickSort(arr){ if(arr.length<=1){return arr}; //选基准值,可以是任意位置 var key=Math.floor(arr.length/2); var keyValue=arr.splice(key,1)[0]; //定义两个数组 var left=[]; var right=[]; for(var i=0;i //小于基准的方左边、大于右边 if(arr[i] left.push(arr[i]); }else{ right.push(arr[i]); } } //递归 return quickSort(left).concat([keyValue],quickSort(right)); //return typeof keyValue; } var array=[5,1,6,4,10,11,15,0,2]; console.log(quickSort(array)); //console.log(bubbleSort(array)); 5.json 对象数组排序 var data = [{ name: "海外事业部", value: 0.58 }, { name: "内销", value: 0.36 }, { name: "互联网中心", value: 0.78 }]; function compare(a,b){ return b.value-a.value; } data.sort(compare); console.log(data); 6.删除数组的第一个元素,不直接改变数组 var a=[2,1,3,4,5,8]; function delFirst(arr){ var arr2=arr.slice(0); arr2.shift(); return arr2; } console.log(delFirst(a)); 7.判断一个字符串中出现次数最多的字符,统计这个次数 var str='addddfffssdfsadfsdfsafjsd'; var json={}; //定义对象来存放 对象属性的值 //遍历字符串,将重复出现的字符 累加 for(var i=0;i if(!json[str.charAt(i)]){ json[str.charAt(i)]=1; }else{ json[str.charAt(i)]++; } } var iMax=0; var icur=''; console.log(json);//{a:3,d:8,f:7,s:6,j:1} //遍历 json对象取最大值 for(var val in json){ if(json[val]>iMax){ iMax=json[val]; icur=val; } } console.log('出现最多的字符:'+icur,'出现次数:'+iMax); 8.求一个字符串的字节长度(中文字符占两个字节) var str='czj陈志杰'; function getStrLen(str){ var json={len:0}; var pattern=/[\u4e00-\u9fa5]/;//unicode编码符合中文字符 for(var i=0;i if(pattern.test(str.charAt(i))){ json['len']++; } } return json['len']+str.length; } console.log(getStrLen(str)); 9.javascript面向对象中继承实现 子构造函数中执行父构造函数,并用call\apply改变this functionPerson(name){ this.name=name; } Person.prototype.showName=function(){ console.log(this.name); } Person.prototype.showJob=function(){ console.log(this.job); } function Student(name,job){ Person.apply(this,arguments);//改变this上下文环境 this.job=job; } for(var i in Person.prototype){ Student.prototype=Person.prototype; } newStudent('chenzhijie','student').showName(); newStudent('chenzhijie','student').showJob(); 10.函数的链式调用 类似:add(1)(2) function add(a){ var sum=a; var tmp=function(y){ sum=sum+y; return tmp;//为了完成链式调用 } //以字符串的形式返回对象的原始值 tmp.toString=function(){ return sum; }; return tmp; } console.log(add(1)(2)(3));//6 11. this的典型应用 事件: onclick this->触发事件的对象 构造函数: this->new 出来的object call/apply : 改变this 12. 降低页面加载时间的方法 1. 压缩css 、js文件 2. 合并js、css文件 ,减少http请求 3. 外部js、css文件放在最底下 4.减少dom操作,尽可能用变量替代不必要的dom操作 13. Ajax工作原理 1.创建ajax对象 if(window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera,Safari xmlhttp=new XMLHttpRequest(); }else{ // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } 2. 判断请求方式(get/post) 3. 打开连接 xmlhttp.open() 4. 发送 xmlhttp.send(null/data) 5. 当ajax对象完成第四步(onreadystatechange)数据接收完成,判断(xmlhttp.readyState==4)和http响应状态(status)200-300之间或者304(缓存)执行回调函数,返回数据xmlhttp.responseText 13. 数组排序,如[[1,2],[2,1],[1,3]]->[[1,2],[1,3],[2,1]] vararr1=[[2,4],[1,2],[2,1],[1,3]]; function comparetwo(a,b){ if(a[0]!=b[0]){ return a[0]-b[0]; }else{ return a[1]-b[1]; } } var result=arr1.sort(comparetwo); console.log(result); 14.HTTP与HTTPS的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。 HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 HTTPS和HTTP的区别主要如下: 1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。 15.查找数组中某元素的位置 function indexOf(arr,item){ for( vari=0;i if(arr[i]==item){returni;} } return -1; } var arr1=[1,2,3,4]; var result=indexOf(arr1,2); console.log(result); 16.数组求和 function sum(arr) { var sum=0; arr.forEach(function(value){ sum+=value; }); return sum; } var arr=[1,2,3,4]; console.log(sum(arr)); 17.移除数组中的item 元素,不直接修改原先数组 function remove(arr,item){ var arr2=[]; arr.forEach(function(val){ if(val!=item){arr2.push(val);} }); return arr2; } 18.splice向/从数组中添加/删除项目,然后返回被删除的项目。 function remove2(arr,item){ var newarr = arr.slice(0); for(vari=0;i if(newarr[i] == item){ newarr.splice(i,1); i--;//删除一个元素后,后面的元素会提前一位 } } return newarr; } 19.改变原始数组 function remove3(arr,item){ for(vari=0;i if(arr[i] == item){ arr.splice(i,1); i--;//删除一个元素后,后面的元素会提前一位 } } return arr; } var arr=[1,2,3,3,5,4,4,9]; console.log(remove2(arr,4)); 20.添加元素 不直接修改原先数组 function append(arr, item) { // return arr.push(item); return arr.concat([item]); } var arr=[1,2,3,5]; console.log(append(arr,4)); 21.删除数组的最后一个元素,不直接改变数组 function truncate(arr) { var arr2=arr.slice(0); arr2.pop(); return arr2; } function truncate2(arr) { vararr2=arr.slice(0,arr.length-1);//返回一个新数组 return arr2; } var arr=[1,2,3,4,5]; console.log(truncate2(arr));//1,2,3,4 22.在数组开头添加元素,不直接改变数组 function prepend(arr, item) { var arr2=arr.slice(0); arr2.unshift(item); return arr2; } var arr=[1,2,3,4,5,6]; console.log(prepend(arr,0)); 23.向数组指定位置添加元素,不直接改变数组 function insert(arr, item,index) { var arr2=arr.slice(0); arr2.splice(index,0,item); return arr2; } var arr=[1,2,3,4]; console.log(insert(arr,5,2)); 24.统计数组中的值等于item元素 出现的次数 function count(arr, item) { var count=0; for(var i=0;i if(arr[i]==item){ count++; } } return count; } var arr=[1, 2, 4, 4,3, 4, 3]; console.log(count(arr,4));
克隆父构造函数原型上的方法