阿里前端笔试题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>