写在前面,这几天没有更新是因为疫情,出行不便,买菜买日常用品这些都不方便,家里也有很多事,再加上工作,因此几乎抽不出时间来写文章。
4、[编程题]
写一个求和的函数 sum,达到下面的计算结果
sum(1, 2, 3, 4, 5) = 15,
sum(5, null, -5) = 0,
sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1) = 10,
sum(0.1, 0.2) = 0.3
--------------------------------------------------------------------------
解答:此题第一个难点是参数个数是不固定的,需要用到Arguments对象来获取所有传递给函数的参数,得到的是一个类数组对象,注意加粗类数组,不同于Array数组对象;
第二个难点是入参既有整型、又有浮点型、还有字符型,但是求和的结果是浮点型,因此要对参数做类型转换。明白了这两个难点后看下面的程序
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>前端面试题系列之JavaScript面试题二(每天巩固一点点)</title>
</head>
<body>
<script type="text/javascript">
function sum() {
var total = 0;
/*遍历Arguments类数组对象,获得所有的入参*/
for (var i = 0, l = arguments.length; i < l; i++) {
//第N个参数
var arg = arguments[i];
//入参有可能是整型、浮点型、字符型,结果是浮点型,因此使用parseFloat函数统一转换为浮点型后进行求和计算
arg = parseFloat( arg );
//parseFloat如果转换失败会返回NaN错误类型,使用isNaN来判断转换浮点型是否成功
if( isNaN( arg ) ){
//转换失败则赋值0
arg = 0;
}
//转换后相加求和
total = total + arg;
}
//使用Number对象的isInteger方法判断是否为整型,不为整型则保留一位小数
if( !Number.isInteger( total ) ){
total = total.toFixed(1);
}
return total;
}
console.log( sum(1, 2, 3, 4, 5) );
console.log( sum(5, null, -5) );
console.log( sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1) );
console.log( sum(0.1, 0.2) );
</script>
</body>
</html>
看下运行结果,符合预期结果。
5、[填空题]
在①、②、③处填上合适的代码,要求删除数组arr1中的第二项和第三项,并且在修改后的数组arr1中第二项添加一个新的值f:
var arr1 = [ 'a', 'b', 'c', 'd', 'e' ];
var arr2 = arr1. ____①____ ( ____②___, ___③___ , 'f' );
--------------------------------------------------------------------------
解答:此题主要考察对Array数组对象的splice()方法的掌握程度,splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并返回新的数组,此方法会改变原数组。此题重点要理解splice方法的参数含义,第一个参数指定修改的开始位置,第二个参数表示要移除的数组元素的个数,第三个参数表示要添加进数组的元素,因此此题的答案是splice、1、2
6、[填空题]
在补充代码处填入适当的代码使得打印出预期的结果:
function showMoney( ) {
//补充代码
};
var personA = new Object;
var personB = new Object;
personA.money= "100";
personB.money= "150";
personA.showMoney= showMoney;
personB.showMoney= showMoney;
期望打印结果:
personA.showMoney( ) 打印出"100"
personB.showMoney( ) 打印出"150"
--------------------------------------------------------------------------
解答:此题的考点是this指针的应用,在ES5标准之前,在函数内部,this指针的值取决于函数被调用的方式,在此题中showMoney函数是被不同的对象personA、personB分别来调用的。因此应该通过this指针访问不同对象的money属性。答案是console.log( this.money );
-----------------------------------简单分割线-------------------------------
我的个人订阅号(大叔学前端/dashu_fe),感兴趣的可以关注下,谢谢!