前端面试题练习(一)
一 javascript
1.JavaScript是一门什么样的语言,它有哪些特点?
是一种直译性的脚本语言,具有动态类型(就是相同的变量可以用作不同的数据类型),弱类型的语言;它不需要编译就可以运行;直接嵌入到html中去,用于让页面呈现更动态性,让用户更舒适的浏览网页;跨平台:它只需要浏览器的支持就可以。
2.javascript的数据类型都有什么?
基本的数据类型:字符串(String)数字(Number)布尔值(Boolean)Undefined,null
引用数据类型:Object(Array,Date,RegExp,Function)
判断数组的类型有哪些方法:
2_1:用instanceof关键字 a istanceof b ?console.log("true"):console.log("false"),b是代表你想判断的类型;eg:a a istanceof array;
2_2:obj.isArray();在ie8之前不支持的;
2_3:constructor; a.constructor==Array ,w3c中写的,返回对创建此对象的时候的函数的引用名
2_4:Object.prototype.toString.call() ;eg:var arr=[];Object.prototype.toString.call(arr); 调用返回该父类里面你穿进去的方法的值,如果没有返回值就是为【object undefined】
3.获取所有的checkbox?
var input =document.getElementByTagName("input"); var checkBoxList = []; var length = input.length; for(var i=0;i<length;i++){ if(input[i].type=="checkbox"){ checkBoxList.push(input[i]); } }
4..设置一个已知ID的DIV的html内容为xxxx,字体颜色设置为黑色
var divEle=docment.getElementById("id"); divEle.innerHTML="xxxx"; divEle.style.color="#000";
5.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?(包含哪些方法可以绑定)
//5-1: <div onclick="click()"></div> //5-2: xxx.onclick=click //5_3: xxx.addEventListener("click",function(){}); \*也可通过该实例演示>在添加事件监听时冒泡与捕获阶段的不同。 冒泡:先具体的元素然后再向父级扩散,捕获,就是从父级开始找最后找到具体的元素,(从上往下)*/
6.什么是ajax和json?每个的优缺点
ajax:异步的javascript 和xml ;(通过核心对象XMLHttpRequest)创建交互式网页运用的开发技术了;创建快速动态的网页技术。
优点:;无需重新加载,可以局部更新的网页技术,通过与后台服务器进行少量的数据交换,使得实现异步刷新,
缺点:在ajax下实现后退按钮,难,当用胡操作ajax下的动态页面,需要回到本次操作之前的页面,(历史记录仅记录静态的页面);在移动设备下支持不友好;使用不当会增加数据流量;安全问题(诸如跨站点脚步攻击、SQL注入攻击和基于Credentials的安全漏洞等等)
json:轻量级的数据交换格式,ECMA(欧洲计算机协会制定的js规范)下的子集;简洁,和清晰的结构是它的特点;采用完全独立于编程语言的文本格式来存储和表示数据
缺点:冗长,什么命名空间,,,,(不明白)
7.下面代码什么意思?
var a; alert(typeof a); // undefined alert(b); // 报错
var a=null; alert(typeof a)//object
var undefined; undefined == null; // true null和undefined相等但不是恒等(===) 1 == true; // true 一个是string一个number时候,string会转换成number。 2 == true; // false尝试将布尔值转成number、1 0 == false; // true尝试将布尔值转成number、 0 == ''; // true空值,和空格也为false 。false=0,true=1; NaN == NaN; // false ,非数值,比较 false。。用的比较少,, [] == false; // true [] == ![]; // true 空数组不相等 var foo = "11"+2-"1"; console.log(foo); //111 string ; 后面又来个减一导致直接string转换为number console.log(typeof foo);//number var foo = "11"+2+"1"; console.log(foo); console.log(typeof foo);
var a = new Object(); a.value = 1; b = a; b.value = 2; alert(a.value);//都指向了同一个引用类型数据。
倒叙排: console.log(arr.reverse()) //[8, 7, 6, 9, 4, 1] 降序排: numberArray.sort(function(a,b){ return b-a;//从大到小的排列 })
13.输出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,则输出2014-09-26
var d=new Date(); var year = d.getFullYear(); var month= d.getMonth()+1; month= month<10? "0"+month:month;//返回的是0-11,1-12月 var day= d.getDate(); var day0= d.getHours(); var day1= d.getMinutes(); var day2= d.getSeconds(); console.log(year+"_"+month+"_"+day+"_"+day0+"_"+day1+"_"+day2)
14..将字符串”<tr><td>{id}</td><td>{id}</td><td>{name}</td></tr>”中的{id}替换成10,{id}替换成10,{name}替换成Tony (使用正则表达式)
var str="<tr><td>{id}</td><td>{name}</td></tr>"; console.log(str.replace(/{id}/g,"go").replace(/{name}/g,"go1"));
15.把 "Doe, John" 转换为 "John Doe"
var name="Doe,John"; console.log(name.replace(/(\w+)\s*/,\s*(\w+)/g),"$2 $1")
var foo = 1; function(){ console.log(foo); var foo = 2; console.log(foo); } //foo 为undefined ;函数内的声明提前,但是打印的时候,并没有赋值,所以undfined又是//只有一个值的数据类型,当声明但并未初始化的时候值就是undfined。
function getRandom(start,end,count){ var arr=[]; while(count--){ var num=Math.floor(Math.random()*end+start);//1-10之间的随机数 arr.push(num) } return arr; } var arr1=[]; arr1=getRandom(1,100,10); arr1.sort(); console.log(arr1)
19.把两个数组合并,并删除第二个元素。
var array1=["1ddddd","222222222222","3"]; var array2=["ad","b","c"]; var concatArr=array1.concat(array2); console.log(concatArr.splice(concatArr.length-2,1))
20.怎样添加、移除、移动、复制、创建和查找节点
//创建: document.createElement();//创建元素 document.createTextNode();//创建文本节点 document.createDocumentFragment();//创建一个虚拟的节点对象,它拥有所有的属性和方法 //添加 appendChild();//追加 removeChild();//删除 replaceChild();//替换 insertBefore();//插入 //查找 document.getElementById(); document.getElementsByName(); document.getElementsByTagName(); document.getElementsByClassName();
21.解析url 返回对象,通过点语法去获取对应的key的val;
function paseUrl(str){ var strings={}; str=str.substring(str.indexOf("?")+1); var arrrrr=str.split("&"); var arrrlength=arrrrr.length; for(var i=0;i<arrrlength;i++){ strings[arrrrr[i].split("=")[0]]=arrrrr[i].split("=")[1]; } return strings; } var str="http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e"; console.log(paseUrl(str))
22.正则表达式构造函数var reg=new RegExp("xxx")与正则表达子面量var reg=//有什么不同?匹配邮箱的正则表达式?
使用正则表达式字面量的效率高于使用构造函数的方式。使用正则字面量写法更简短些
23.给出结果,解释、
for(var i=1;i<=3;i++){ setTimeout(function(){ console.log(i); },0) }; //定时器是异步的,0秒后执行回调,也就是说他会放到队列的后面去,等待执行(但前提是主线程里面的任务要执行完,也就是for循环)循环几次都会把回调放到后面去,当for循环完的时候再开始执行。。。也就是444 //怎么让他输出1,2,3呢 for(var i=1;i<=3;i++){ setTimeout((function(a){ //改成立即执行函数 console.log(a); })(i),0); };
24.写一个function,清除字符串前后的空格。(兼容所有浏览器)
function trim(s){ return s.replace(/(^\s*)|(\s*$)/g, ""); }
、、、、兼容还不知怎么写。。。
25.Javascript中callee和caller的作用?
function parentCheck() { check(""); function check() { subCheck(); function subCheck() { console.log(arguments.callee); console.log(subCheck.caller.caller) } } } parentCheck();
来源(https://zhidao.baidu.com/question/263697314329750005.html)
二:中级的javascript
1.实现一个函数clone,可以对javascript中的几种数据类型(number,string,boolean,array,object)进行值复制
- 考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚
- 考察点2:是否知道如何判断一个变量是什么类型的
- 考察点3:递归算法的设计
function unique(array) { var res = [],i = 0,len = array.length; for (i,len; i < len; i++) { var current = array[i]; if (res.indexOf(current) === -1) { res.push(current) } } return res; }
3.
...待续 日更!!!