騰訊2013筆試題—web前端筆試題 (老題練手)


問題描述(web前端開發附加題1):
編寫一個javascript的函數把url解析為與頁面的javascript.location對象相似的實體對象,如:url :'http://www.qq.com/index.html?key1=1&key2=2',最后輸出的對象是

{
    protocol: "http", 
    hostname: "www.qq.com", 
    pathname: "index.html", 
    query: "key1=1&key2=2"
}

我的答案:

 1     var mylocation = {
 2         'protocol':'http',
 3         'hostname':'',
 4         'pathname':'',
 5         'query':''
 6     }
 7     var url = 'http://www.qq.com/index.html?key1=1&key2=2';
 8     var str=url.replace(/http\:\/\//,"");
 9     var a=str.split(/(\/)|(\?)/g);
10     mylocation.hostname=a[0];
11     var arr=a[1].split("?");
12     mylocation.pathname=arr[0];
13     mylocation.query=arr[1];
14     console.log(mylocation);

 

發現一個有趣的現象,這里提出與大家分享:
本來打算直接有正則分解字符串:
str.split(/(\/)|(\?)/g);
最后發現怎么搞都是:
["www.qq.com", "/", undefined, "index.html", undefined, "?", "key1=1&key2=2"]

最后查了資料才知道,split方法在用正則分解字符串的時候不會消除正則表達式,為此糾結好久。

 

 

作用:

split() 方法用於把一個字符串分割成字符串數組。

語法:

stringObject.split(separator,howmany)
參數 描述
separator 必需。字符串或正則表達式,從該參數指定的地方分割 stringObject。
howmany 可選。該參數可指定返回的數組的最大長度。如果設置了該參數,返回的子串不會多於這個參數指定的數組。如果沒有設置該參數,整個字符串都會被分割,不考慮它的長度。

返回值:

一個字符串數組。該數組是通過在 separator 指定的邊界處將字符串 stringObject 分割成子串創建的。返回的數組中的字串不包括 separator 自身。

但是,如果 separator 是包含子表達式的正則表達式,那么返回的數組中包括與這些子表達式匹配的字串(但不包括與整個正則表達式匹配的文本)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM