2020年前端面试之JS手写代码题合集

预计会有上千道题,后续慢慢补!

1.  写一个把字符串大小写切换的方法

function caseConvert(str){return str.replace(/([a-z]*)([A-Z]*)/g, (m, s1, s2)=>{return `${s1.toUpperCase()}${s2.toLowerCase()}`})
}
caseConvert('AsA33322A2aa') //aSa33322a2AA

2.  写一个方法把下划线命名转成大驼峰命名

function strToCamel(str){return str.replace(/(^|_)(\w)/g,(m,$1,$2)=>$2.toUpperCase());
}

3.  去除字符串中最后一个指定的字符

function delLast(str,target) {let reg =new RegExp(`${target}(?=([^${target}]*)$)`)return str.replace(reg,'')
}

4.  写一个方法去掉字符串中的空格

const str = '  s t  r  'const POSITION = Object.freeze({left: Symbol(),right: Symbol(),both: Symbol(),center: Symbol(),all: Symbol(),
})function trim(str, position = POSITION.both) {if (!!POSITION[position]) throw new Error('unexpected position value')switch(position) {case(POSITION.left):str = str.replace(/^\s+/, '')break;case(POSITION.right):str = str.replace(/\s+$/, '')break;case(POSITION.both):str = str.replace(/^\s+/, '').replace(/\s+$/, '')break;case(POSITION.center):while (str.match(/\w\s+\w/)) {str = str.replace(/(\w)(\s+)(\w)/, `$1$3`)}break;case(POSITION.all):str = str.replace(/\s/g, '')break;default: }return str
}const result = trim(str)console.log(`|${result}|`) //  |s t  r| 

5.  用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值

描述:

  1. 这是一道大题目,把考点拆成了4个小项;需要侯选人用递归算法实现(限制15行代码以内实现;限制时间10分钟内完成):
    a) 生成一个长度为5的空数组arr。
    b) 生成一个(2-32)之间的随机整数rand。
    c) 把随机数rand插入到数组arr内,如果数组arr内已存在与rand相同的数字,则重新生成随机数rand并插入到arr内[需要使用递归实现,不能使用for/while等循环]
    d) 最终输出一个长度为5,且内容不重复的数组arr。
    var arr = new Array(5);var num = randomNumber();var i = 0;randomArr(arr,num);function randomArr(arr,num) {if (arr.indexOf(num)< 0){arr[i] = num;i++;} else {num = randomNumber();}if (i>=arr.length){console.log(arr);return;}else{randomArr(arr,num)}}function randomNumber() {return Math.floor(Math.random()*31 + 2)}

6.  写一个去除制表符和换行符的方法

const removeSymbol = (str) => str.replace(/\t|\n|\r/g, "");const str ="\t11122233\n_aaaaaaa\r\n_bbbbbb\t_3333333\r_4444444\n_555555";console.log(removeSymbol(str));

7.  统计某一字符或字符串在另一个字符串中出现的次数

var childInNums = parent.split(child).length - 1, 这个没毛病吧
//或者
str.match(new RegExp(`${target}`, 'g')).length

8.  写一个加密字符串的方法

function encode (str) {return btoa(encodeURIComponent(str));
}function decode (str) {return decodeURIComponent(atob(str));
}
// 利用 base64, 浏览器环境自带 btoa / atob 方法
// Node.js 需要引入相关库
const str = "abcdefg";console.log(btoa(str));
console.log(atob(btoa(str)));// 凯撒密码
const encodeCaesar = ({str = "", padding = 3}) =>!str? str: str.split("").map((s) => String.fromCharCode(s.charCodeAt() + padding)).join("");const decodeCaesar = ({str = "", padding = 3}) =>!str? str: str.split("").map((s) => String.fromCharCode(s.charCodeAt() - padding)).join("");console.log(encodeCaesar({str: "hello world"}));
console.log(decodeCaesar({str: "khoor#zruog"}));

9. 写一个判断数据类型的方法

typeof argument //如果结果为object,则用toString.call再次判断Object.prototype.toString.call(argument).replace(/^.{8}(.+)]$/,(m,$1)=> $1.toLowerCase());

10. 简要描述下什么是回调函数并写一个例子出来

回调是把一个函数作为参数传递给另一个函数,当该函数满足某个条件时触发该参数函数。
主要用于异步操作 例如网络请求 防止页面同步代码阻塞导致渲染线程停止

11. 网页应用从服务器主动推送到客户端有那些方式?

服务端推送

webSocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

eventsource(SSE)

EventSource 接口是 Web 内容与服务器发送的事件的接口。一个 EventSource 实例打开一个持久连接 HTTP 服务器,它发送事件的 text/event-stream 格式。连接保持打开状态,直到通过调用关闭 EventSource.close()。

与 WebSockets 不同,服务器发送的事件是单向的。也就是说,数据消息是从服务器到客户端(例如用户的 Web 浏览器)沿一个方向传递的

Web Push

就是用户订阅了一个站点的 Web Push 服务后,即使用户关闭了浏览器,一旦站点主动发送推送消息,用户都能收到,只要你的电脑是开着的。这是目前谷歌和苹果在 Chrome 和 Safari 上都力推的一种全新推送服务,Firefox 最近也加入了这个阵营。

但是由于需要 GCM 支持,所以这个方法并不常见

12. 简要描述下JS有哪些内置的对象

  • 时间对象Date
  • 字符串对象String
  • 数学对象Math
  • 数值对象Number
  • 数组对象Array
  • 函数对象Function
  • 函数参数集合arguments
  • 布尔对象Boolean
  • 错误对象Error
  • 基础对象Object
  • 正则表达式对象 RegExp

13. http都有哪些状态码?

  • 200 成功
  • 301 重定向
  • 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
  • 400 (错误请求) 服务器不理解请求的语法。
  • 403 (禁止) 服务器拒绝请求。
  • 404 (未找到) 服务器找不到请求的网页。
  • 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
  • 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
  • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
  • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
  • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
  • 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

14. 写一个获取当前url查询字符串中的参数的方法

function getParams(name) {const { search }  = window.location;const params = new URLSearchParams(search);return params.get(name)
}

15. 什么是闭包?优缺点分别是什么?

闭包的定义:从外部访问或者操作函数内部变量的的方式,缓存数据,延长作用域链(JS是函数作用域)

例子:定义了一个内部变量,但是不想使这些变量不能被外部随意修改,同时又可以通过指定的函数接口来操作来访问,闭包的作用常常用来「间接访问一个变量」。换句话说,「隐藏一个变量」

优点:以隐藏变量以及防止变量被篡改和作用域的污染,从而实现封装。模块化编程。

缺点:函数中的变量不能及时的释放

function Foo(){var name = "fooname";  //需要从外部访问这些变量var age = 12;this.getFoo = function(){  //设置访问方法return name;}this.setFoo = function(){return age;}this.xgFoo = function(new){name = new;}
}var foo = new Foo();
foo.getFoo();  //访问name变量。
foo.xgFoo("liz") //从外部修改nage变量

16. 写一个数组去重方法

function uniqueArr(arr) {return [...new Set(arr.flat(Infinity))]
}
[1,2,3,4,4,5,5,2].filter((item, index, arr) => arr.indexOf(item) === index)

2020年前端面试之JS手写代码题合集相关推荐

  1. 【面试题】 「中高级前端面试」JavaScript手写代码无敌秘籍

    大厂面试题分享 面试题库 前端面试题库 (面试必备)   推荐:★★★★★ 地址:前端面试题库 1. 实现一个new操作符 new操作符做了这些事: 它创建了一个全新的对象. 它会被执行[[Proto ...

  2. 【2022前端面试】CSS手写面试题汇总(加紧收藏)

    [2022前端面试]CSS手写面试题汇总(加紧收藏) 更新时间:2022年3月3日 把答案一起写上,但是希望大家在看之前思考一下,如果有好的建议,跪求改正! 本文致力于建设前端面试题库,欢迎兄弟们投稿 ...

  3. 前端面试高频手写代码题

    前端面试高频手写代码题 一.实现一个解析URL参数的方法 方法一:String和Array的相关API 方法二: Web API 提供的 URL 方法三:正则表达式+string.replace方法 ...

  4. python在哪里写代码比较适合-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...

    原标题:程序员面试被要求手写代码,你与顶级程序员的差别在哪? 前言: Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 所以小的给各位看官们准备了收藏已久的视频教程分享给大家 ...

  5. python在哪里写代码-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...

    原标题:程序员面试被要求手写代码,你与顶级程序员的差别在哪? 前言: Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 所以小的给各位看官们准备了收藏已久的视频教程分享给大家 ...

  6. 前端常见手写面试题合集

    实现一个函数判断数据类型 function getType(obj) {if (obj === null) return String(obj);return typeof obj === 'obje ...

  7. 风尚云网面试题系列—JS高频手写代码题

    目录 实现 Promise 实现一个 call 函数 实现一个 apply 函数 实现一个 bind 函数 浅拷贝.深拷贝的实现 实现一个防抖函数 实现一个节流函数 柯里化函数的实现 Object.c ...

  8. 2020年最新阿里、字节、腾讯、京东等一线大厂高频面试(Java岗)真题合集,面试轻松无压力

    本文涵盖了阿里巴巴.腾讯.字节跳动.京东.华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研 ...

  9. 华为手撕代码c语言题目,想去面试?这10道最高频的手撕代码题都会了吗?

    原标题:想去面试?这10道最高频的手撕代码题都会了吗? 来源:Python与算法之美 ID:Python_Ai_Road 作者:梁云1991 想去看机会?下面这10道最高频的手撕代码面试题都会了吗? ...

最新文章

  1. 第二次学习笔记(linux/unix操作系统)
  2. win8安装msi出现提示2503 2502的错误代码
  3. 一起学设计模式-策略模式
  4. MySQL 高级 循环获取游标
  5. 想到Exchanger N parties的一种用法
  6. 怎么自己打印餐饮小票_自己怎么做餐饮外卖配送系统?可以开发外卖配送系统的公司有哪些?...
  7. 数据结构与算法分析(二)——C++实现链表
  8. RGB想YCbCr空间的变换
  9. 输入上标的html标签是,HTML上标sup与下标注sub标签元素
  10. 如何在Linux下加载移动硬盘和光驱
  11. python eoferror_Python3:EOFError: Ran out of input
  12. R语言|plot和par函数绘图详解,绘图区域设置 颜色设置 绘图后修改及图像输出
  13. 历史类:古希腊与亚历山大帝国
  14. 关于计算机的英语笑话,最经典的英语笑话,戳中你的笑点了吗?
  15. qt线程如何接收linux信号,Linux-Qt使用QThread多线程isRunning标志量问题
  16. 写服务器node实际项目,基于node搭建服务器,写接口,调接口,跨域的实例
  17. 德勤报告:来自甲骨文的七大发现!企业数字化转型必备
  18. 【每日新闻】中国人工智能技术爆炸发展,美国开始落后?
  19. html5电脑配置,H310C主板福音来临!八代奔腾G5400核显组装电脑配置清单及价格
  20. matlab代码怎么清除,matlab个人学习笔记:数据清理

热门文章

  1. CGI脚本跨站截取Cookie/附ASP的版本
  2. aptana安装svn的方法
  3. UIScrollView 滚动视图 (实例)
  4. RewriteCond 详解
  5. 剑指offer 26.数字的子结构
  6. 博弈——巴什博弈(hdu1846,2188,2897)
  7. Idea利用maven打包spring boot项目
  8. Spring IOC容器-Bean管理——基于XML方式
  9. Qt Ctreator搭配VS2013调试——整合QML/C++调试需要的从属调试引擎无法被创建
  10. 【今日CV 计算机视觉论文速览 第115期】Fri, 10 May 2019