分享几道Javascript相关的面试题
一。字符串的反转
这里提供了两种解题思路。如果各位读者还有其他的思路,可以分享交流,请不要吝啬!
第一方式:就不说思路,看代码之后,一目了然。
1 <script type="text/javascript"> 2 function foo(){ 3 var str = 'a,b,c,d,e,f,g'; 4 var s = reverse(str);//字符串反转 5 console.log(s); 6 if(s === 'g,f,e,d,c,b,a'){ 7 console.log('成功。'); 8 }else{ 9 console.log('失败。');10 }11 }12 function reverse(str){13 var sp = str.split(',');14 //保存反转之后的字符串15 var new_str = '';16 /*从后往前取,用逗号分隔*/17 for(var i = sp.length-1;i>=0;i--){18 new_str += sp[i]+',';19 }20 /*取到length-1,否则会取到最后一个逗号。*/21 new_str = new_str.substring(0,new_str.length-1);22 return new_str;23 }24 </script>
输出的结果在这:
第二种,用到的是javascript的自带的API。
1 <script type="text/javascript"> 2 function foo(){ 3 var str = 'a,b,c,d,e,f,g'; 4 var s = reverse(str); 5 6 if(s == 'g,f,e,d,c,b,a'){ 7 alert('成功。'); 8 } 9 else{10 alert('失败。');11 }12 }13 function reverse(str){14 return str.split(',').reverse().join(',');15 }16 </script>
二。编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2&PRime;
URL的编码规则:每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值
思路是这样的:
1.用?将url拆成两部分,第一部分为:http://witmax.cn/index.php,第二部分为:key0=0&key1=1&key2=2。也就是将地址和参数分开,保存在一个数组中。
1 var arr = url.split('?');2 console.log(arr.toString());
结果:
2.在第一的基础上将之前的第二部分,也就是参数部分,用&拆成多个部分,如key0=0,key1=1。然后用=号将键值对拆开,key,value。
1 arr = arr[1].split('&');2 console.log(arr.join(','));3 for(var i = 0, len = arr.length; i < len; i++){4 var a = arr[i].split('=');5 params[a[0]] = a[1];6 }
控制台输出:
下面给出完整的代码:
1 <script type="text/javascript"> 2 /* 3 * 将URL参数解析为一个对象 4 * @param url 被解析的url地址。 5 * 如:http://witmax.cn/index.php?key0=0&key1=1&key2=2 6 * */ 7 function parseQueryString(url){ 8 /*如果地址为空或者url没有参数则直接返回空null*/ 9 if(url == null || url.indexOf('?') == -1){10 return null;11 }12 var params = {};13 /*14 * 用?将url拆成两部分,第一部分为:http://witmax.cn/index.php15 * 第二部分为:key0=0&key1=1&key2=216 * */17 var arr = url.split('?');18 console.log(arr.toString());19 if(arr.length <= 1){20 return params;21 }22 /*23 * 将之前的第二部分用&拆成多个部分,键值对24 * 然后用=号将键值对拆开,key = value25 * */26 arr = arr[1].split('&');27 console.log(arr.join(','));28 for(var i = 0, len = arr.length; i < len; i++){29 var a = arr[i].split('=');30 params[a[0]] = a[1];31 }32 return params;33 }34 console.log(parseQueryString('http://witmax.cn/index.php? key0=0&key1=1&key2=2'));35 </script>
三。鼠标点击页面中的任意标签,alert该标签的名称
注意一下浏览器的兼容性。
简单的说一下target和srcElement以及event。
target和srcElement:
JS中event.srcElement是IE中的用法,event.target是非IE中的用法.
实际使用中可以用:obj = event.srcElement ? event.srcElement : event.target;
event:
1、在IE中,event对象是作为window.event全局对象存在的。
2、在Firefox中,event对象是作为事件的参数存在的。
1 获取元素事件对象: 2 function getEventTarget(e){ 3 e = window.event || e; 4 return e.srcElement || e.target; 5 } 6 7 /*10 核心部分都在上面了。11 12 */
给出代码:
1 <script type="text/javascript">2 document.onclick = function(evt){3 var e = window.event || evt;4 var tag = e['target'] || e['srcElement']5 alert(tag.tagName);6 };7 </script>
四。编写一个方法 求一个字符串的字节长度
假设:一个英文字符占用一个字节,一个中文字符占用两个字节。
主要用到的方法是charCodeAt()。这也是解题的核心,将中英文分开计算。
charCodeAt的返回的是指定位置字符的unicode码值,而大于255的编码值为非常规字符,如中文,日文等
1 <script type="text/javascript"> 2 function getBytes(str){ 3 if(!arguments.length || !str) 4 return null; 5 if(str.length == '') 6 return 0; 7 var len = str.length; 8 var bytes = 0;//记录字节数 9 for(var i = 0; i < len; i++){10 /*charCodeAt的返回的是指定位置字符的unicode码值,而大于255的编码值为非常规字符,如中文,日文等*/11 if(str.charCodeAt(i)>255){12 bytes+=2;13 }else{14 bytes++;15 }16 }17 return bytes;18 }19 console.log(getBytes('代码之美,beautiful code'));//2420 </script>
完!
新闻热点
疑难解答