阿里前端笔试题2
1.写一个求和的函数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);
(1) parseFloat()函数将字符串转换成浮点数;
paseFloat(String)
如:window.parseFloat("-2");//返回-2
parseInt()函数将字符串转换为整数
如:window.parseInt("3.5");//返回3
window.parseInt("bar");//返回NaN,意思就是不能转换为数字
window.parseInt("1010",2);//返回10,这个就是二进制的转换
(2)toFixed()函数
1. toFixed(n) 限制小数点后位数,四舍五入。n:0~20 。
2. 作用对象必须是number,不能为其他类型。如(8.001).toFixed(2)返回8.00;
3. toFixed(n)返回值是String类型,所有当成数字进行比大小是错误的。
4. parseFloat(“number“)与parseInt("number")读取字符串中第一个遇到的数(如91.2w3 第一个数为91.2)并转换为float或int,返回类型为number.
如:
var a0 = 8.01.toFixed(); var a1 = parseFloat("8.006").toFixed(2); var a2 = parseFloat("9.091").toFixed(2);
a0,a1,a2的类型都是string
(3)Arguments类和arguments属性(是javascript的内置类)
Arguments类是用于存储和访问函数的参数,它位于函数体内部,可以使用Function类的arguments属性对其进行访问。
Arguments类代表的这些参数作为数组元素存储,所以就进行这样的访问,第一个参数就是arguments[0],第二个arguments[1]....
arguments.length属性表示传递给函数的参数数目,但是,传递给函数的参数与该函数声明的参数的数目可能不同。下面的代码就是这么做的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>求和</title>
<script type="text/javascript">
function sum() {
var nResult = 0;
for (var i = 0, len = arguments.length; i < len; i++) {
nResult += window.parseFloat(arguments[i]) || 0;
}
return nResult.toFixed(3) * 1000 / 1000;
}
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>
</head>
<body>
</body>
</html>

上面的代码,
2. 请写一个表格以及对应的CSS,使表格奇数行为白色背景,偶数行为灰色背景,鼠标移上去时为黄色背景。
通过for循环遍历,然后
trs[i].className=(i%2==0)?'even':'odd';
来判定是奇数行还是偶数行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>奇偶行变色</title>
<style type="text/css">
tr{
text-align: center;
}
.even{
background-color:grey;
}
.odd{
background-color: white;
}
.ye{
background-color: yellow;
}
</style>
<script type="text/javascript">
window.onload=function(){
var tab=document.getElementById('t1');
var tbody=tab.getElementsByTagName('tbody')[0];
var trs=tbody.getElementsByTagName('tr');
for(var i=0;i<trs.length;i++){
trs[i].className=(i%2==0)?'even':'odd';
//鼠标移上去会变黄色
trs[i].onmouseover=function(){
this.className='ye';
}
trs[i].onmouseout=function(){
this.className=' ';
}
}
}
</script>
</head>
<body>
<div style="margin:10px 0;">
<table id="t1" style="width:500px;height:auto">
<thead>
<tr style="background-color:#00ae9d">
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
</tr>
<thead>
<tbody>
<tr>
<td>1</td>
<td>张三</td>
<td>24</td>
</tr>
<tr>
<td>2</td>
<td>李逵</td>
<td>38</td>
</tr>
<tr>
<td>3</td>
<td>林冲</td>
<td>43</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
3. 写一个traverse函数,输出所有页面宽度和高度大于50像素的节点。
(1)在DOM中,HTML文档的各个节点被视为各种类型的Node对象,并且将HTML文档表示为Node对象的树。对于任何一个树形结构来说,最常做的就是遍历树。在DOM中,可以通过parentNode,firstChild,nextChild,lastChild,childNodes(节点所有的子节点)等属性来遍历文档树。
(2)concat用于数组的连接。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>转换</title>
<script type="text/javascript">
function traverse(oNode){
var aResult=[];
var oNode=oNode||doucment.body;
if(oNode.style){
var nWidth=window.parseInt(oNode.style.width,10)||0;
var nHeight=window.parseInt(oNode.style.height,10)||0;
if(nWidth>50 && nHeight>50){
aResult.push(oNode);
}
}
var aChildNodes=oNode.childNodes;
if (aChildNodes.length>0) {
for(var i=0,len=aChildNodes.length;i<len;i++){
var oTemp=aChildNodes[i];
aResult=aResult.concat(traverse(oTemp));
}
}
return aResult;
}
</script>
</head>
<body>
</body>
</html>

浙公网安备 33010602011771号