- 之前没事,写一些比较常用或面试考察的手写方法,最近花了
2
天时间进行了反复修改完善并整理,金三银四,希望能帮到大家,offer
拿到手软,BAT
不再是梦! - 文中代码对应的详细注释和具体使用方法都放在我的 GitHub 上,欢迎
Star
。 - 贴代码工具:carbon
typeof
返回基本数据类型(null
除外,由于设计失误typeof null
返回object
)和引用类型(function
)。null
、undefined
、number
、string
、boolean
、symbol
、bigint
、function
。
- 通过
call
方法调用,返回的是一个固定格式的字符串“[object Number]
”,我们去掉前面固定的 “[object
”和后面的 “]
”,剩下的就是我们要的结果,返回的是和内置名称一致的字符串(例如:Date
、RegExp
、Math
、JSON
、BigInt
...);
NaN
是Number
,所以要判断是否是NaN
,可以使用内置的isNaN
方法,该方法返回true
/false
。
new
做了什么:- 创建了一个全新的对象;
- 会被执行
[[Prototype]]
(也就是__proto__
)链接; this
指向新创建的对象;- 通过
new
创建的每个对象将最终被[[Prototype]]
链接到这个函数的 prototype 对象上; - 如果函数没有返回对象类型
Object
(包含Functoin
,Array
,Date
,RegExg
,Error
),那么new
表达式中的函数调用将返回该对象引用。
sleep
函数可以让当前线程进行休眠指定时间。
- 使用
Promise
实现的,我更倾向理解为延迟,它不会中断当前执行代码,只是微任务,在延迟之后执行!
- 请点击跳转链接 -> ES6 Promise 最全手写实现
- 相同点:
call
、bind
、apply
都是用来改变this
指向的。call
、bind
、apply
这三个函数的第一个参数都是this
的指向对象。
- 不同点:
call
参数是直接放进去的,第二第三第n
个参数全都用逗号分隔。apply
的所有参数都必须放在一个数组里面。bind
除了返回是函数以外,它的参数和call
一样。
- 防抖:在限制的时间范围内连续触发相同事件,函数不会执行,直到间隔大于限制事件才执行。
- 节流:连续触发相同事件每隔指定时间调用一次。
- 将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。
- 作用:
- 为各种数据结构,提供一个统一的、简便的访问接口;
- 使得数据结构的成员能够按某种次序排列;
ES6
创造了一种新的遍历命令for...of
循环,Iterator
接口主要供for...of
消费。
- 遍历过程:
- 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
- 第一次调用指针对象的
next
方法,可以将指针指向数据结构的第一个成员。 - 第二次调用指针对象的
next
方法,指针就指向数据结构的第二个成员。 - 不断调用指针对象的
next
方法,直到它指向数据结构的结束位置。
- 原生具备
Iterator
接口的数据结构:Array
、Map
、Set
、String
、TypedArray
、函数的arguments
对象、NodeList
对象。
- 通过
new
操作符创建一个localStorage / sessionStorage
的实例,在需要用的地方引入该实例,使用方法和之前类似,setItem
额外提供第三个参数设置过期时间。 - 额外提供两个方法
getAll
(获取当前存储类型的所有存储内容的键值对象)、forEach
(遍历所有存储内容,接收一个处理函数,函数接收两个参数:存储键名、对应的值)。
flat
方法是把多维数组进行指定维度的扁平化。- 不传参数,维度降一。
- 传入
Number
,大于最大维度,降为一维;小于1
返回原始数组。 - 传入
Infinity
降为一维; - 传入其他能转为
Number
,转为Number
再根据上面的规则判断,否则返回原始数组。
- JS 和多端应用通信
- 通过
new
操作符创建一个EventEmitter
的实例,在需要用的地方引入该实例add
:注册事件;once
:注册只执行一次的事件,执行后销毁;remove
:移除事件支持全部移除、指定回调方法/下标(第几次绑定的事件);removeByIndex
:支持全部移除/指定下标(第几次绑定的事件);removeByCallback
:支持全部移除/指定回调方法;dispatch
:触发指定事件;clear
:清除全部注册事件;getAll
:获取全部注册事件;forEach
:遍历所有注册事件,并接受回调函数,回调函数接收两个参数:事件名称、事件注册的回调函数数组。
- 在开发中,我们拿到一个数组,数组的每个索引值是一个对象,由于对象可能存在很多的属性,我们需要只获取某个条件下对应对象指定的几个属性(过滤);或存在我们只需要某个相同属性值第一次出现的对象(去重)。
- 手机类型:
iPhone
,Pixel
,Moto
,iPad
,iPod
- 浏览器类型:
Opera
,Firefox
,Chrome
,Safari
,WeChat
,QQ
- 内核类型:
Trident
,Presto
,WebKit
,Gecko
- 操作系统类型:
Mac
,iOS
,Android
,Linux
,Unix
,Win
,Win7
,Win2000
,Win2003
,WinXP
,WinVista
- 电脑/手机:
PC
、Mobile
- 之前写的
Promise
不满足PromiseA+
的规范,后续会持续完善,并更新到 GitHub 仓库 。
- JavaScript 设计模式之行为型模式(下)
- JavaScript 设计模式之行为型模式(上)
- JavaScript 设计模式之结构型模式
- JavaScript 设计模式之简介及创建型模式
- 公众号打开小程序最佳解决方案(Vue)
- Axios 你可能不知道使用方式
❤️ 关注+点赞+收藏+评论+转发 ❤️,创作不易,鼓励笔者创作更好的文章,谢谢 🙏 大家。