一些常见JS面试题
程序员文章站
2022-03-04 12:16:39
...
1、监测数据类型
function isType(o) {
return Object.prototype.toString.call(o).slice(8,-1);
}
2、实现函数bind 的方法
Function.prototype.bind=Function.prototype.bind || function (context) {
var self =this;
return function () {
return self.apply(context,arguments)
}
}
3、数据对象的克隆
function clone(Obj) {
var newObj;
if (Obj instanceof Array) {
newObj = []; // 创建一个空的数组
var i = Obj.length;
while (i--) {
newObj[i] = clone(Obj[i]);
}
return newObj;
} else if (Obj instanceof Object){
newObj = {}; // 创建一个空对象
for (var k in Obj) { // 为这个对象添加新的属性
newObj[k] = clone(Obj[k]);
}
return newObj;
}else{
return Obj;
}
}
4、区分类型的数组去重
var a1 = [1,2,2,3,"2"];
//es6写法
Array.from(new Set(a1));
//es5写法
function distinct(o) {
var temobj={};
var result =[];
o.forEach(function (a) {
var key = (typeof a)+a;
if(!temobj[key]){
temobj[key]=true;
result.push(a)
}
})
return result;
}
console.log(distinct(a1))
5、获取查询字符串
function queryUrlParam(url) {
var url = url||window.location.href;
var reg = /([^?=&]+)=([^?=&]+)/g;
var obj ={};
url.replace(reg,function () {
var arg = arguments;
console.log(arg);
obj[arg[1]]=arg[2];
});
return obj;
}
6、斐波那契数列
//使用递归实现
function fn(n){
if(n==1|n==2){
return 1;}
//因为斐波那契数列格式为:1、1、2、3、5、8、13、21、34、......,n=1和n=2的时候都是输出1
return fn(n-1)+fn(n-2);
//不断调用自身函数,n-1是穿进去的参数的前一次,就是最后n的前一个数字。所以n-2是最后传入参数的前两个数字。
}
//用函数写出斐波那契数列
var n=parseInt(prompt('请输入一个数字'));
var a1=1;
var a2=1;
var a3=0;
for(var i=2;i<=n;i++){//因为前两个数都是1,所以要从i=2开始,就是前两个数的1+1=2,i的初始值其实是第三个数
a3=a1+a2;//第三个数等于第一个数加上第二个数
a1=a2;//第一个数就变成了之前的第二个数
a2=a3;//第二个数就变成了刚刚的第三个数
}
console.log(a3);
7、求数组第二大数
var aa=[1,3,5,2,7,6]
aa[aa.indexOf(Math.max.apply(null,aa))]=null //找到第一大的数,置位空。
Math.max.apply(null,aa)
es6: 求最大值。
Math.max(...aa)
上一篇: 详细介绍php 三种文件下载的实现
下一篇: php文件下载后不能打开怎么办