金山笔试总结
金山公司的笔试题目,过后把自己在考场写的代码测试一下,发现存在不少问题,仔细地总结了一番,如下:
一、检查一个值是否为NaN
1 <html> 2 <head> 3 <script language="JavaScript"> 4 function isNumber(){ 5 var btnObj=document.getElementById("idTel"); 6 var strValue=btnObj.value; 7 8 if(!isNaN(strValue)){ //若是数字则返回false 9 alert("is number"); 10 }else{ 11 alert("not a number"); 12 } 13 14 } 15 </script> 16 </head> 17 <body> 18 <form action="" method="post" name=""> 19 <input type="text" name="tel" id="idTel" value=""> 20 <input type="button" name="isNum" value="提交" onclick="isNumber()"> 21 </form> 22 </body> 23 </html>
二、JS函数实现sum(2)(3) => 5
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 function sum(a){ 10 return function(b){ 11 return a+b; 12 } 13 }; 14 alert(sum(3)(2));//闭包有两种应用:1、函数作为返回值 2、函数作为参数传递 15 </script> 16 </body> 17 </html>
三、从整数1到n共出现多少个0
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 //从整数1到n共出现了多少个0 10 function count_zero(n){ 11 var arr = new Array(); 12 for(var i = 1;i <= n;i++){ 13 var b = i,r; 14 while(b != 0){ 15 r = b % 10; 16 b = Math.floor(b / 10); //一开始是"b=b/10",js并不像C语言 17 arr.push(r); 18 } 19 }; 20 var zero_num = count(arr); 21 return zero_num; 22 } 23 24 function count(arr){ 25 var count = 0; 26 for(var i = 0;i < arr.length;i++){ 27 if(arr[i] == 0){ 28 count++; 29 } 30 } 31 return count; 32 } 33 34 var a = count_zero(100); 35 var b = count_zero(105); 36 console.log(a); 37 console.log(b); 38 39 // javascript除法如何取整 40 // Math.round(x) 四舍五入,如Math.round(0.60),结果为1;Math.round(0.49),结果为0; 41 // Math.floor(x) 向下舍入,如Math.floor(0.60)与Math.floor(0.49),结果均为0; 42 // Math.ceil(x)向上舍入,如Math.ceil(0.60)与Math.ceil(0. 49),结果均为1。 43 </script> 44 </body> 45 </html>
四、JS函数,从数组中清除重复元素
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 function uniqueArray(arr){ 10 var arr = arr || []; //var arr = arr | []; arr一直都是0。。。 11 console.log(arr); 12 var obj = {}; 13 for(var i = 0;i < arr.length;i++){ 14 var v = arr[i]; 15 if(typeof(obj[v]) == 'undefined'){ 16 obj[v] = 1; 17 } 18 }; 19 arr.length = 0; 20 for(var i in obj){ 21 arr[arr.length] = i; 22 }; 23 return arr; 24 } 25 var arr1 = [1,3,5,7,7,8,9,3,10,8]; 26 var arr2 = [1,3,5,7,7,8,9,3,10,8,"sdsdsds","sss","ffff","sss","sss"]; 27 console.log(uniqueArray(arr1)); 28 console.log(uniqueArray(arr2)); 29 </script> 30 </body> 31 </html>
这是在度娘上找到的不错的一种算法
五、prototype实现一个简单的继承例子
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 function Father(){ 10 this.Supproperty = "hi,i am gdt"; 11 } 12 Father.prototype.getSupValue = function(){ 13 return this.Supproperty; 14 }; 15 function Son(){ 16 this.Subproperty = "hi,i am fxt"; 17 } 18 Son.prototype = new Father(); 19 20 Son.prototype.getSubValue = function(){ 21 return this.Subproperty; 22 }; 23 24 var instance = new Son(); 25 console.log(instance instanceof Son);//instanceof用于判断一个变量是否某个对象的实例,如是则返回true 26 console.log(instance); 27 //引用父类的属性和方法 28 console.log('父类属性:'+instance.Supproperty); 29 console.log('父类属性:'+instance.getSupValue()); 30 //使用子类的属性和方法 31 console.log('子类属性:'+instance.Subproperty); 32 console.log('子类属性:'+instance.getSubValue()); 33 </script> 34 </body> 35 </html>
六、网络请求优化方案
- 尽量减少HTTP请求数里的减少图片请求数量,可用实现CSS Sprite
-
压缩文本和图像,使用gzip这样的压缩技术,依靠增加服务端压缩和浏览器解压的步骤,来减少资源的负载。
- 使用Ajax来从Web服务器上获取数据,它并不需要更新正在运行的页面,Ajax能更新页面上的某个部分而不需要重新构建整个页面。
详细还可参考http://blog.jobbole.com/46599/