1、一个数组 par 中存放有多个人员的信息,每个人员的信息由年龄 age 和姓名 name 组成,如{age: 2, name: 'xx'}。请写一段 JS 程序,对这个数组按年龄从小到大进行排序。
function sortAge(arr){ return arr.sort(function(arr1,arr2){ return arr1.age-arr2.age; }) }
return a-b:倒序
return b-a:升序
2、有字符串 var = 'abc345efgabcab',请写出 3 条 JS 语句分别实现如下 3 个功能:
1)去掉字符串中的a、b、c 字符,形成结果:'345efg' str.replace(/[abc]/g,'')
2)将字符串中的数字用中括号括起来,形成结果:'abc3[5]efgabcab' str.replace(/(d)+/g, '[$1]');
3)将字符串中的每个数字的值分别乘以 2,形成结果:'abc6810efgabcab' str.replace(/(d)/g, function(num) {return num*2;});
3、请写出下面 JS 程序中几个 alert 的结果:
var a = 100; function fn() { alert(a); var a = 200; alert(a); } fn(); undefined 200 alert(a);100 var a; alert(a);100 var a = 300; alert(a);300
4、请问以前 JS 程序有什么问题?应该如何优化?
function setStyle(element) { element.style.fontWeight = "bold"; element.style.textDecoration = "none"; element.style.color = "#000000"; }
优化后:
function setStyle(element) { if (!element.style) { return; } var eleStyle = element.style; eleStyle.fontWeight = "bold"; eleStyle.textDecoration = "none"; eleStyle.color = "#000000"; }
5、请写出一下正则表达式:
1)匹配一个全部是数字的字符串
var pat=/^d+$/; //开头到结尾都是数字的字符 var str='2345'; str.match(pat) //["2345"]
2)提取一个 url 所使用的协议类型如 http、ftp 和 host 名称
var str = 'http://yangbai.me'; var pat=/(w+)://([w.]+)/; var result=str.match(pat); //["http://yangbai.me", "http", "yangbai.me"] var http=result[1]; var host=result[2];
6、请使用闭包的方式,写一段 JS 程序实现如下功能:函数每调用一次则该函数的返回值加 1。
function fn(){ var n=0; function fn1(){ n++; console.log(n); } return fn1; } var foo=fn(); foo(); //1 foo(); //2 foo(); //3
7、有这样一个 URL:http://vip.qq.com/a.php?a=1&b=2&c=&d=xxx&e,请写一段 JS 程序提取 URL 中的各个参数(参数名和参数个数不确定),将其按 key-value 形式返回到一个 json 结构中,如{a:'1',b:'2',c:'',d:'xxx',e:undefined}。
function UrltoJson(url){ var arr=url.split('?')[1].split('&'); var result={}; arr.forEach(function(e){ var aEle=e.split('='); result[aEle[0]]= aEle[1]? aEle[1]:undefined; //判断是否存在 }) return result; }
8、编写一个方法 求一个字符串的字节长度
function getBytes(str){ var len=str.length; var bytes=len; for (var i = 0; i < len; i++) { if (str.charCodeAt(i)>255) {bytes++}; //Unicode大于255的字符占两个字节,其他占一个字节 }; return bytes; }
9、判断一个字符串中出现次数最多的字符,统计这个次数
把字母依次放在对象里,每次放之前判断已经存在这个属性,存在value+1;否则value=1;最后遍历这个对象,比较对象的max值,把最大的value和key打印出来
function maxTime(str){ var len=str.length; var obj={}; //将结果放在一个对象里,统计出现的次数 for (var i = 0; i < len; i++) { var key=str.charAt(i); if (!obj[key]) { obj[key]=1; }else{ obj[key]++; }; }; var max=-1; var max_key=""; for (var key in obj){ if (obj[key]>max) { max=obj[key]; max_key=key; }; } return "出现次数最多的字母是:"+max_key+"出现次数为:"+max; }
10、什么是闭包?下面这个ul,如何点击每一列的时候alert其index?
<ul id="myul"> <li>1</li> <li>2</li> <li>3</li> </ul>
(function() { var ali = document.getElementsByTagName("li"); var len = ali.length; for (var i = 0; i < len; i++) { ali[i].onclick = (function(i) { return function() { alert(i + 1); } })(i); }; })(); ///*应该使用闭包的方式:使用立即执行函数 (function(i){})(i),将i作为参数传递进去,内部返回了一个函数,返回的函数会引用该参数;
11.实现缺少的解析函数
function tmpl(str,obj){ var name=obj.name; var job=obj.job; return str.replace(/{name}/g,name).replace(/{job}/g,job); }
12.说出以下代码的原型链