Javascript面试题浅析
2016-06-02 00:47 图书馆的牧羊人 阅读(358) 评论(0) 编辑 收藏 举报分享几道JavaScript相关的面试题.
字符串反转
这这里提供了两种解题思路。如果各位读者还有其他的思路,可以分享交流!
第一方法:
function reverse(str){ var sp = str.split(','); //保存反转之后的字符串 var new_str = ''; /*从后往前取,用逗号分隔*/ for(var i = sp.length-1;i>=0;i--){ new_str += sp[i]+','; } /*取到length-1,否则会取到最后一个逗号。*/ new_str = new_str.substring(0,new_str.length-1); return new_str; }
第二种方法:
function reverse(str){ return str.split(',').reverse().join(','); }
编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″
1.用?将url拆成两部分,第一部分为:http://witmax.cn/index.php,第二部分为:key0=0&key1=1&key2=2。也就是将地址和参数分开,保存在一个数组中
var arr = url.split('?');
2.在1的基础上将之前的部分,即参数部分用&拆成多个部分,如key0=0,key1=1。然后用=号将键值对拆开。
var arr = arr[1].split("&"); for(var i = 0; i < arr.length; i++){ var a = arr[i].split('='); params[a[0]] = a[1]; }
完整代码
function parseQueryString(url){ //如果url为空或url没有参数则直接返回 if(url === null || url.indexOf('?') < 0) return ; var params = []; //将url拆成2部分 var arr = url.split('?'); if(arr.length <= 1){ return params; } //用&拆成多个部分,每个部分是一个键值对 //然后用=将键值对拆分 arr = arr[1].split('&'); for(var i = 0; i < arr.length; i++){ var a = arr[i].split('='); params[a[0]] = ar[1]; } return params; }
点击页面上的任意元素,弹出元素的标签名
这里涉及到浏览器的兼容性问题。简单的说明一下target和srcElement以及event的区别。
在IE浏览器中,event对象是作为window.event全局对象存在的。在Firefox中是作为事件参数存在的。
srcElement是IE中的用法,target是非IE浏览器中的用法。为了兼容可以用如下方式获取:
target = event.srcElement ? event.srcElement : event.target;
要获取标签名可以通过tagName属性。
function getTarget(event){ event = window.event || event; return event.srcElement || event.target; } document.onclick = function(event){ var tag = getTarget(event); alert(tag.tagName); }
编写一个方法,求一个字符串的字节长度
假设,一英文字符占用一个字节,一个中文字符占用两个字节。
主要用到的方法是charCodeAt()。charCodeAt()方法返回的是指定位置字符的unicode码,而大于255的编码值为非常规字符,如中文、英文等。
function getBytes(str){ //没传参 if(arguments.length === 0 || !str) return null; if(str.length <= 0 || str === '') return 0; var len = str.length; //字节数 var bytes = 0; for(var i = 0; i < len; i++){ if(str.charCodeAt(i) > 255){ bytes += 2; }else{ bytes += 1; } } return bytes; } console.log(getBytes('代码之美,beautiful code'));//24
转载请注明出处
如果你觉得文章不错,可以点一下右下角的推荐
今天的风有点喧嚣啊