分享幾道JavaScript相關的面試題. 字元串反轉 這這裡提供了兩種解題思路。如果各位讀者還有其他的思路,可以分享交流! 第一方法: 第二種方法: 編寫一個JavaScript函數 parseQueryString,它的用途是把URL參數解析為一個對象,如:var url = “http://w ...
分享幾道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