前端面试修仙(二)
写在前面,比较重要的知识点,书上出错的地方我才会明确指出,主要目的是我怕也有人和我一样倒霉买了这本书。
1.问题:利用js实现获取5个0到99之间的随机数?
var arr=[];
for(i=0;i<100;i++){
arr.push(i);
}
function getNumber(arr){
var _arr =[];
var index;
for(i=0;i<5;i++){
var index =parseInt(Math.random()*100);
_arr.push(arr[index]);
}
return _arr;
}
var b=getNumber(arr);
console.log(b);//我自己写的,仅做参考
2.问题:用原生js写一个 traverse 函数,输出所有页面宽度和高度大于 50 像素的节点?
这里写代码片
3.问题:统计1到1000之间的自然数有多少个含有1?比如1到21,有1,10,11,12,13,14,15,16,17,18,19,21共11个数?(这个问题是我对前端面试江湖里的61题改进的,他的题目是错的,1到21他居然说只有5个含有1,这真的是蠢出天际)
这里写代码片
4.问题:用js编写一个0到7的随机函数?
这里写代码片
5.问题:写js代码,找到arr1中出现而arry2中没有出现的数字?
这里写代码片
6.问题:编写js函数arrFilter过滤数组内的重复元素,要求根据传入的参数的不同,实现不同的输出方案,方案一,不改变原数组,返回一个新数组,方案二,改变原数组并返回。
这里写代码片
7.问题:给arry数组增加换一个方法,maxMin,作用是去掉数组里的最大值和最小值。并返回新的数组?(原书中的答案,答非所问)
这里写代码片
8.数组方法pop(),push(),unshift(),shift()分别具备什么功能?
- pop(),从集合中把最后一个元素删除,并返回这个元素的值。
- push(),从集合中添加一个元素,并返回一个新的长度。
- unshift(),在集合开头添加一个元素,并返回新的数组。
- shift(),把集合中的第一个元素删除,并返回这个元素的值。
9.js中如何规避多人开发时函数重命名问题?
- 使用单例模式,创建命名空间,根据不同的开发人员开发的功能加前缀
- 立即执行函数,避免污染全局。
10.请分别描述js中,prototype、constructor、this、argument的含义
- -
11.这里就扩展一下this的常用用法:1.纯粹的函数调用,2.作为对象的方法调用,3.作为构造函数调用,4.apply调用。
12.问题:当点击按钮时,如何实现2个id的值互换?
这里写代码片
13 . prenventDefault(),用来阻止dom元素的默认行为。stopPropagation()阻止冒泡。
14.在form表单中在效果上来说,get和post都能够获取到服务器的数据,也都会向服务器发送数据。但是在语义上来说,get的确是为了得到数据,随get的参数应该是请求所需的参数,而不该是写入数据库的数据。post的返回值应该是存入数据的状态,而不是一个新的页面。虽然在使用的时候大家基本都会混淆两者。get传送的数据量较小,不能大于2KB的说法是来自于IE对URL长度的限制,HTTP规范中并没有规定URL的长度上限。get和post的安全性差不多吧,除非蠢到在get参数中明文传递用户名和密码。要提高安全性,请选用https协议。
15.说说js中数组排序方法sort()的使用?
16.前端面试江湖,题187错误,题目:call和apply的区别?
- 其实call和apply都可以改变this的执行环境,主要区别在于,call的参数传递从第二个开始,而apply的参数是类数组。
17.问题:请写一个表格以及对应的 CSS,使表格奇数行为白色背景,偶数行为灰色背景,鼠标移上去时为黄色背景。
这里写代码片
这里写代码片
这里写代码片
18.问题:写一个求和的函数 sum,达到下面的效果
// Should equal 15
sum(1, 2, 3, 4, 5);
// Should equal 0
sum(5, null, -5);
// Should equal 10
sum(‘1.0’, false, 1, true, 1, ‘A’, 1, ‘B’, 1, ‘C’, 1, ‘D’, 1, ‘E’, 1, ‘F’, 1, ‘G’, 1);
// Should equal 0.3, not 0.30000000000000004
sum(0.1, 0.2);
这里写代码片
19.问题:在空白处填入适当的代码使输出结果成立:
function showMoney( ) {
1
};
var personA = new Object;
var personB = new Object;
personA.money= “100”;
personB.money= “150”;
personA.showMoney= showMoney;
personB.showMoney= showMoney;
20.问题:删除给定数组中的第二项和第三项,并且在得到的新的数组中第二项后面添加一个新的值:
var arr1 = [‘a’,’b’,’c’,’d’,’e’];
这里写代码片
21.使用for in循环数组中的元素会枚举原型链上的所有属性,过滤这些属性的方式是用hasOwnProperty()
22.问题:请实现一个 fibonacci 函数,要求其参数和返回值如下所示:
/**
*@desc: fibonacci
*@param: count {Number}
*@return: result {Number} 第 count 个 fibonacci 值,计数从 0 开始
fibonacci 数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]
则 getNthFibonacci(0)返回值为 1
则 getNthFibonacci(4)返回值为 5
*/
function getNthFibonacci(count) {
}
这里写代码片
23.问题:输出对象中值大于 2 的 key 的数组
var data = {a: 1, b: 2, c: 3, d: 4};
期待输出:[“c”,”d”]
这里写代码片