前言
這幾天將js方面的知識系統的回顧了一遍,但是當嘗試去做一些面試題時覺得解決問題的能力以及效率還是有所欠缺,在這里特意記錄一下所做的面試題并總結所涉及到的相關知識點。
一、面試題、答案以及總結
1、截取字符串abcdefg的efg
var str="abcdefg";方法一: str.substr(4,3);//第二個參數可選,如果在這里省略,截取的字符串也將延伸到最后 方法二:str.substring(4);//該方法有兩個參數,第二個參數為可選,由于這種方法截取字符串時將不包括結束索引位置的字符,因此在此處省略了第二個參數
總結:截取字符串的方法
2、?判斷一個字符串中出現次數最多的字符,統計這個次數
var strobj = {};var str = "adsssweasxfccadddd";for (var i = 0; i < str.length; i++) {if (strobj[str.charAt(i)] != undefined) {strobj[str.charAt(i)] += 1;}else {strobj[str.charAt(i)] = 1;}} var MaxNum = 0;//出現的次數var c;//記錄出現次數最多的字符for (var s in strobj) {if (strobj[s] > MaxNum) {MaxNum = strobj[s];c = s;}}alert("出現次數最多的字符為:" + c + ",最大次數為:" + MaxNum);
總結:
(1)、字符串
js中字符串最常用的屬性就是length,它表示的是字符串中字符的個數。還有很多方法,比如可以通過charAt(索引)來訪問某個索引處的字符。
(2)、for in 循環
可以用來擴列對象的屬性
(3)、自定義對象
通過字面量的方式來創建自定義對象:var obj={};
(4)、undefined
有一下幾種情況會返回undefined值:
- 使用未申明的變量
- 使用一個已經聲明但沒有復制的變量
- 使用的對象不存在
3、規避javascript多人開發函數重名問題(還沒怎么用到過)
可以通過命名空間、封閉空間等來解決。
?
4、javascript面向對象中繼承實現;
?
?
5、編寫一個方法 求一個字符串的字節長度;
var str = "aa字符串";/*方法一:通過ASCII碼來實現var CLength=0;for (var i=0; i < str.length;i++){if(str.charCodeAt(i)>255){CLength++;//debugger;} }CLength=CLength+str.length;alert("\'" + str + "\'字符串的字節長度為:" + CLength);*///方法二:通過正則表達式來判斷是否為漢字var CLength = 0;var re = /[\u4e00-\u9fa5]/;for (var i = 0; i < str.length; i++) {if (re.test(str.charAt(i))) {CLength++;//debugger; }}CLength = CLength+str.length;alert("\'" + str + "\'字符串的字節長度為:" + CLength);
總結:
這里主要是考察了如何判斷字符是漢字,上面的代碼中列出了兩種方式:1、通過字符串的charCodeAt(索引)來獲取字符的ASCII碼從而來判斷是否是漢字;2、通過正則表達式方式來判斷;
?
6、編寫一個方法 去掉一個數組的重復元素
var Arr = [1, 2, 3, 1, 43, 12, 12, 1,3,5,'s','a'];var obj = {};//用于存儲數組Arr中沒有重復的值var res = [];//處理之后的數組var j = 0;//檢驗該數組元素是否存在于obj中function Check(ArrValue) {if (obj[ArrValue] != undefined) {return true;}else return false;}//處理數組function ControlArr(Arr) {for (var i = 0; i < Arr.length; i++) {//將數組元素值拿到obj中驗證if (!Check(Arr[i])) {obj[Arr[i]] = Arr[i];}}//debugger;for (var r in obj) {res[j] = r;j++;}return res;}alert(ControlArr(Arr));
7、this關鍵字的用法?
8、js中的深淺克隆
9、javascript中的ajax請求??
10、 閉包
?
?