
JS面试
主要写一写JavaScript面试相关的内容
1oneLee
这个作者很懒,什么都没留下…
展开
-
千分位逗号隔开(手写js)
/* * @Description: * @Autor: zhangbing * @Date: 2021-09-15 12:58:43 * @LastEditors: zhangbing * @LastEditTime: 2021-09-15 13:28:27 */function numFormat(num) { let numArr = num.toString().split('.') let newArr = [] // 整数部分 let numStr = numA原创 2021-09-15 13:28:47 · 290 阅读 · 0 评论 -
数组扁平化
/* * @Description: * @Autor: zhangbing * @Date: 2021-08-03 13:39:31 * @LastEditors: zhangbing * @LastEditTime: 2021-08-03 15:24:23 *//** * 方法一: 利用递归 */function myFlatten(arr) { let result = [] for (let i in arr) { if (Array.isArray(arr原创 2021-08-06 12:09:34 · 89 阅读 · 0 评论 -
函数柯里化
/* * @Description: * @Autor: zhangbing * @Date: 2021-08-05 17:28:54 * @LastEditors: zhangbing * @LastEditTime: 2021-08-06 12:05:15 *//** * * @param {*} fn 柯里化绑定的函数 * @param {*} length fn函数形参的个数 * @returns 返回一个新的函数或者执行结果 */ function curryin原创 2021-08-06 12:07:24 · 91 阅读 · 0 评论 -
面试的一些小问题
一. 0.1 + 0.2 != 0.3 的小数精度问题0.1 + 0.2 != 0.3 的小数精度问题.。这是因为ECMAScript 中的 Number 类型遵循 IEEE 754 标准,使用 64 位固定长度来表示。IEEE 754标准符号位:1位指数位:11位尾数位:52位0.1 和 0.2 用二进制表示的话一般是无限循环的二进制数,相加后后面会截取一部分,并不是完整的相加结果,所以精度会丢失。二. Symbol 的特性独一无二原始类型不可枚举let sym1原创 2021-08-05 20:42:51 · 110 阅读 · 0 评论 -
前端常见手写算法题
判断字符串中出现的次数最多的字符,返回该字符及次数let string = '1add23rte2fgg52'function most(str) { let ret = {} for (let i = 0; i < str.length; i++) { let value = str[i] if (ret[value]) { ret[value]++ } else { ret[value] = 1 } } let c.原创 2021-03-24 11:51:48 · 180 阅读 · 0 评论 -
实现 instanceof
function instanceOf(target, type) { type = type.prototype target = target.__proto__ while(true) { if(target === null) { return false } if(target === type) { return true } target = target.__proto__ }}let arr = [1,原创 2021-03-02 21:33:03 · 158 阅读 · 0 评论 -
对象的深拷贝
1. ES5 来实现对象的深拷贝详细注释<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body>原创 2021-02-10 10:25:59 · 190 阅读 · 0 评论 -
原生JS模拟实现new
原生JS模拟实现 newJavaScript通过new的模拟实现,揭开使用new获得构造函数实例的真相new一句话介绍 new:new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一也许有点难懂,我们在模拟 new 之前,先看看 new 实现了哪些功能。举个例子:function Person (name, age) { this.name = name; this.age = age; this.habit = 'Games';}原创 2021-02-07 14:31:31 · 210 阅读 · 1 评论 -
原生JS重写Function.prototype.bind( )方法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <script> Fu原创 2021-02-07 13:48:10 · 420 阅读 · 0 评论 -
重写Function.prototype.apply()方法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <script> /*原创 2021-02-07 11:34:09 · 326 阅读 · 0 评论 -
圣杯模式来实现对象继承(企业级的继承方式)
/* * function: inherit -> 通过圣杯模式来实现继承 * params: * Target:继承的对象 * Origin: 被继承的对象 */ function inherit(Target, Origin) { // careate a buffer function function Buffer() {} // let the prototype of Buffer point to the i原创 2021-02-01 10:20:08 · 194 阅读 · 0 评论 -
JavaScript之call和apply的模拟实现
JavaScript之call和apply的模拟实现通过call和apply的模拟实现,揭开call和apply改变this的真相call一句话介绍 call:call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。举个例子:var foo = { value: 1};function bar() { console.log(this.value);}bar.call(foo); // 1注意两点:call 改变原创 2021-01-25 17:22:18 · 107 阅读 · 0 评论 -
JavaScript实现快速排序
var quickSort = function(arr) { // 当数组的长度小于等于1时 返回(退出递归) if (arr.length <= 1) { return arr; } // 选取中间值作为基准值 var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1)[0]; // 创建两个空数组分别存放小于基准值的数组和大于基准值的数组 v原创 2020-12-28 19:00:41 · 107 阅读 · 0 评论 -
前端面试JavaScript手写代码
JavaScript手写代码目录JavaScript手写代码1. 实现一个`new`操作符2. 实现一个`JSON.stringify`3. 实现一个`JSON.parse`3.1 第一种:直接调用 eval3.2 第二种:Function4. 实现一个`call`或 `apply`4.1 `Function.call`按套路实现4.1.1 简单版4.1.2 完善版4.2 `Function.apply`的模拟实现5. 实现一个`Function.bind()`6. 实现一个继承7. 实现一个JS函数柯里转载 2020-12-26 21:27:46 · 429 阅读 · 0 评论 -
数组扁平化概念
数组扁平化目录数组扁平化实现1. reduce2. toString & split3. join & split4. 递归5. 扩展运算符总结数组扁平化是指将一个多维数组变为一维数组[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]实现1. reduce遍历数组每一项,若值为数组则递归遍历,否则concat。function flatten(arr) { return arr.reduce((result,原创 2020-12-26 14:58:19 · 134 阅读 · 0 评论 -
继承(JavaScript高级程序设计第六章核心知识笔记(二))
继承6.3.1 原型链原型链作为继承的主要方法:基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法 function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ return this.property; }; fu原创 2020-12-25 22:46:19 · 165 阅读 · 1 评论 -
对象的浅拷贝与深拷贝
对象的浅拷贝与深拷贝前言工作中可能会遇到这样一个问题,我明明把数据拷贝了一份,但改变拷贝后的数据居然同时会改变原始数据中的值。那就来看看为什么吧,希望这篇文章可以给你解惑。什么是浅拷贝「只拷贝了数据对象的第一层,深层次的数据值与原始数据会互相影响(拷贝后的数据与原始数据还存有关联)」常见浅拷贝的方式:Object.assign()、扩展运算符const obj1 = { name: 'dog', info: { age: 3 } }const obj2 = Object.assign({},转载 2020-12-23 21:46:01 · 108 阅读 · 0 评论 -
随机打乱数组
主要思路:首先以最后一个元素为目标,此时对应的索引为 arr.length - 1,然后随机生成index,将这两个元素进行交换。然后再以倒数第二个为目标,重复前面的步骤…var a = [1, 2, 3, 4, 5]var len = a.lengthvar index, tempfunction rs(arr) { for (var point = len - 1; point >= 0; point--) { index = Math.floor(Math.random()原创 2020-12-22 13:04:16 · 410 阅读 · 0 评论 -
JS事件流和事件委托
JS事件流和事件委托事件流一共由三个阶段分别是:捕获阶段目标阶段冒泡阶段事件绑定大家都知道,有DOM0级(on+type)和DOM2级(addEventListener),我觉得说那么多概念不好理解,直接看代码吧,为了方便我就直接使用id来获取元素。DOM0级<div id="box1"></div>box1.onclick = function(){ console.log('box1');}输出了box1这个我们都知道,再来看一下。<di转载 2020-12-22 00:04:42 · 159 阅读 · 0 评论 -
防抖与节流函数的封装
1. 防抖我们在平时开发的时候,会有很多的场景会频繁触发事件,比如说搜索框实时发送请求。oumousemove、resize、onscroll等等,有些时候我们并不想频繁触发事件,咋办呢?这个时候我们就可以用到函数的防抖和节流了。1. 直接使用underscore.js来实现这些功能。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="vie原创 2020-12-16 22:21:25 · 421 阅读 · 0 评论 -
JavaScript闭包
JavaScript闭包一、获取局部作用域的变量通过变量向外传递。通过函数向外传递。条件和循环体:{}不代表作用域,在es6语法中,{}会被看做代码块,此时在{}当中声明一个函数,相当于var声明,尽量不要在{}当中声明函数,否则调用的时候会有问题。// 通过变量 向外传递 var b = '';function fn1(){ var a = "月薪10w"; b = a;}fn1();alert(b); //取到函数内局部作用域的变量a的值// 通过函数传参获取原创 2020-12-13 22:43:00 · 100 阅读 · 0 评论 -
原型链面试题
测试题1var A = function() {}A.prototype.n = 1var b = new A()A.prototype = { n: 2, m: 3}var c = new A()console.log(b.n, b.m, c.n, c.m) // 1 undefined 2 3测试题2var F = function() {}Object.prototype.a = function() { console.log('a()')}F原创 2020-12-12 21:56:57 · 1666 阅读 · 1 评论 -
数组遍历的几种方法及用法
来源:转载 [链接:](https://blog.youkuaiyun.com/weixin_42733155/article/details/81145334) (后续编辑更新,这是我后面重写的一篇文章,关于数组的遍历方法和使用场景介绍的更加详细一点,地址戳我 ,有兴趣的可以看看。) js提供了多种遍历数组的方法,具体使用场景略有区别,在此简单介绍一下。 一、forEach方法 fo.转载 2020-11-26 11:15:02 · 731 阅读 · 1 评论 -
数组相关的一些知识汇总
1. 数组降维1.1 二维数组降维<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body>原创 2020-11-26 11:04:08 · 89 阅读 · 0 评论