2018面试题精选

你如何获取浏览器URL中查询字符串中的参数?

这个好比浏览器的URL:http://www.runoob.com/jquery/misc-trim.html?channelid=12333&name=xiaoming&age=23

http://www.runoob.com/jquery/misc-trim.html?channelid=12333&name=xiaoming&age=23
实现:

function showWindowHref(){
    var sHref = window.location.href;  //获取浏览器的URL
    var args = sHref.split('?');  //截取   split() 方法用于把一个字符串分割成字符串数组。
    if(args[0] == sHref){   //检查是不是有参数
        return "";
    }
    var arr = args[1].split('&');
    var obj = {};
    for(var i = 0;i< arr.length;i++){
        var arg = arr[i].split('=');
        obj[arg[0]] = arg[1];
    }
    return obj;
}
var href = showWindowHref(); // obj
console.log(href['name']); // xiaoming

Git的工作流?

集中式工作流

集中式工作流以中央仓库作为项目所有修改的单点实体;
本工作流只用到master这一个分支。
开发者开始先克隆中央仓库。在自己的项目拷贝中像SVN一样的编辑文件和提交修改;但修改是存在本地的,和中央仓库是完全隔离的。开发者可以把和上游的同步延后到一个方便时间点。
要发布修改到正式项目中,开发者要把本地master分支的修改『推』到中央仓库中。

功能分支工作流

功能分支工作流以集中式工作流为基础,不同的是为各个新功能分配一个专门的分支来开发。这样可以在把新功能集成到正式项目前,用Pull Requests的方式讨论变更。
功能分支工作流背后的核心思路是所有的功能开发应该在一个专门的分支,而不是在master分支上。
这个隔离可以方便多个开发者在各自的功能上开发而不会弄乱主干代码。
另外,也保证了master分支的代码一定不会是有问题的,极大有利于集成环境。
功能分支工作流仍然用中央仓库,并且master分支还是代表了正式项目的历史。
但不是直接提交本地历史到各自的本地master分支,开发者每次在开始新功能前先创建一个新分支
功能分支应该有个有描述性的名字,比如animated-menu-items或issue-#1061,这样可以让分支有个清楚且高聚焦的用途。

数组去重?

Array.prototype.distinct = function (){
 var arr = this,
  i,
  j,
  len = arr.length;
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] == arr[j]){
    arr.splice(j,1);
    len--;
    j--;
   }
  }
 }
 return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

indexOf indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1

利用es6语法里的set数据结构
Set数据结构,它类似于数组,其成员的值都是唯一的。

function dedupe(array){
 return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]
//或者
var asd=new Set([1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3]);
 console.log(asd);  //1,23,2,3

数组去空

判断数组的每一项是否等于undefined
过滤器写法

function file(item) {
        return item!==undefined;
    }
    var a = [1,1,,2,,3,,];
    console.log(a.filter(file))

代理 代理一个console.log方法

//传入单个参数
    var arr=function (a) {
        console.log(a)
    };
    arr(22)

//传入多个参数
var log=console.log.bind(console)

function log(){
 console.log.apply(console, arguments); 
};

如何实现深拷贝、浅拷贝;

堆栈

待更新....
专门为前端求职者准备面试问题和答案。
https://github.com/yangshun/front-end-interview-handbook Star 13020

你可能感兴趣的:(2018面试题精选)