前言
这几天将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、 闭包