前端开发的面试中,至少有一类题是必出的,那就是去重。什么叫去重呢?就是把一组字符串中重复出现的,都删除掉。
这种题重要的是解决的思路要正确,思路正确的话其实也很简单。无非就是一个for循环,然后把每个字符都在一个临时的对象上进行保存与比较。
思路如下:
1,使用for循环,循环每一个字符;
2,将循环的结果,保存在变量之中,这个变量,可以是对象,也可以是数组;
3,在每次循环中设置适当的if判断条件
伪代码:
var _v = 'adfaf';
var str = {};
str['a'] = 123;
str['b'] = 456;
for(...){
if( 第i个字符 in 临时对象中 ){
str[_v[i]]++;
} else {
就将此第i个字符,添加到对象中
str[_v[i]] = 1;
}
}
这类面试题所考核的知识点之一,就是对于js对象的键值对的知识点的掌握。
////////
arguments与arguments.callee,今天对它也进行了着重的讲解。虽然我个人觉得面试题中提到它并不多,但做为一个js的知识点,也是需要讲解的。
<!-- arguments -->
它,也是一个对象,但同时它是函数的内置属性。
它非常类似于数组,但又不是数组。
它有length长度方法,可以使用[n]来获取arguments成员;
但不能使用数组的相关方法。
它的length,长度是由实参决定的,而不是形参。
就是说,你向某函数中传入多少个值,
那么此函数的auguments的长度就是多少,
与此函数的形参无关。
<!-- -->
arguments有一个属性:callee [kɔ:ld],被召者,被叫,
它返回的是,此arguments对象它所在的当前函数的引用。
它在使用的时候,一般用来代替,“当前函数的名称”。
事实上,在递归中对于arguments.callee的应用比较多。
递归:
function xxx(n){
if(n>1){
<!-- xxx() -->
arguments.callee(n-1);//代替,“当前函数的名称”
}
}
////////
下午的时候主要讲了缓动公式。我们日常在用js或css来写页面动画的时候,需要用到一些动画函数,这些函数中已经封装好了各种的数学公式,以各种js或css方法的形式出现,
例如,
Linear:无缓动效果;easeIn;easeOut;easeInOut...
缓动公式其实长这样,
这些都是数学公式在js程序代码中的应用与实现。讲这些东西不是要让大家去推导这些数学公式,而是想让你们明白,咱们使用的各种动画函数,到底是如何起作用的。
通过各种实例来让大家了解并掌握上面那些知识点,因为它们是组成前端知识结构的细节。一句话,只是为了“知其然”。