那啥……要面试了,刷点面试题让我静静。
一、做点JS编程题压压惊
var url = 'http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e';
function getKeyValue(url) {
var result = {};
url = url.split("?")[1];
var map = url.split("&");//["a=1", "b=2", "c=", "d=xxx", "e"]
for (var i = 0; i < map.length; i++) {
var item = map[i].split("=");
result[item[0]] = item[1];
}
return result;
}
getKeyValue(url);//{a: "1", b: "2", c: "", d: "xxx", e: undefined}
这题就一直在用split()函数了。
2、写一个 function,清除字符串前后的空格。(兼容所有浏览器)
if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^\s+/,"").replace(/\s+$/,"");
}
}
var str = '\t hello world \n'.trim();
alert(str == 'hello world');
在浏览器不存在trim方法的情况下,走自定义的trim。去除字符串开头结尾的空格。
3、如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第 n 个月能繁殖成多少对兔子?
var result = [];
function fn(n) { //典型的斐波那契数列
if (n == 1) {
return 1;
} else if (n == 2) {
return 1;
} else {
if (result[n]) {
return result[n];
} else {
//argument.callee()表示 fn()
result[n] = arguments.callee(n - 1) + arguments.callee(n -
2);
return result[n];
}
}
}
斐波那契数列。
arguments.callee() 获取当前函数的引用。
4、实现检索当前页面中的表单元素中的所有文本框,并将它们全部清空
for (var i = 0; i < document.forms.length; i++) {
for (var j = 0; j < document.forms.elements.length; j++) {
if (document.forms.elements[j].type == "text")
document.forms.elements[j].value = "";
}
}
这题挺考验写原生js的能力的呀……
5、希望获取到页面中所有的 checkbox 怎么做?(不使用第三方框架)
<body>
<input type="text" name="1">
<input type="checkbox" name="2">
<input type="text" name="3">
<input type="checkbox" name="5">
<input type="text" name="6">
<script type="text/javascript">
var domList = [];
var input = document.getElementsByTagName('input');
for (var i = 0; i < input.length; i++) {
if (input[i].type == 'checkbox') {
domList.push(input[i]);
}
}
console.log(domList);
</script>
</body>
是document.getElementsByTagName();
elements这里不能少写了s
6、判断一个字符串中出现次数最多的字符,统计这个次数。
var s = "saldkfjalsjfldsieiiiiisdf";
function getNum(s) {
var result = {};
for (var i = 0; i < s.length; i++) {
if (!result[s[i]]) {
result[s[i]] = 1;
} else {
result[s[i]] += 1;
}
}
return result;
}
var result = getNum(s);
var iMax = 0;
for(var i in result) {
if (result[i] > iMax) {
iMax = result[i];
}
}
7、字符串反转,如将 '12345678' 变成 '87654321'。
var str = '12345678';
str = str.split('').reverse().join('');
8、将数字 12345678 转化成 RMB 形式 如: 12,345,678。
var str = '1234567';
var temp = "";
for (var i = 0; i < str.length; i++) {
temp += str[i];
if (i % 3 == 2 && i != str.length-1) {
temp += ',';
}
}
temp.split("").reverse().join("");
9、生成 5 个不同的随机数。
var result = [];
for (var i = 0; i < 5; i++) {
var flag = true;
var x = Math.floor(Math.random()*10);
for (var j = 0; j < result.length; j++) {
if (x == result[i]) {
flag = false;
// break;
i--;
}
}
if (flag) {
result.push(x);
}
}