
js
文章平均质量分 61
tscn1
这个作者很懒,什么都没留下…
展开
-
代理和反射
reflect它是JS的内置对象,开发者可以通过调用这些方法,访问一些JS底层原理。reflect做什么使用Reflect可以实现诸如 属性的赋值与取值、调用普通函数、调用构造函数、判断属性是否存在与对象中 等等功能这些功能不是已经存在了吗?为什么还需要用Reflect实现一次?有一个重要的理念,在ES5就被提出:减少魔法、让代码更加纯粹这种理念很大程度上是受到函数式编程的影响ES6进一步贯彻了这种理念,它认为,对属性内存的控制、原型链的修改、函数的调用等等,这些都属于底层实现,属于一种原创 2022-03-06 17:01:15 · 696 阅读 · 0 评论 -
属性描述符
什么是属性描述符属性描述符(Property descriptor)就是一个对象,用来描述对象属性的相关信息。Object.getOwnPropertyDescriptor(对象,属性名)得到一个对象的某个属性的属性描述符返回值:value:属性值configurable:该属性的描述符是否可以修改enumerable:该属性是否可以被枚举writable:该属性是否可以被重新赋值Object.getOwnPropertyDescriptors(对象)可以得到某个对象的所有属性原创 2022-03-06 13:30:08 · 673 阅读 · 0 评论 -
编写高质量代码
目录01.警惕Unicode乱码要点名词解释资料01.警惕Unicode乱码要点在JS中可以使用中文来命名变量或函数名ECMA标准规定JS语言基于Unicode标准进行开发,JS内核完全采用UCS字符集进行编写,因此在JS代码中每个字符都采用两个字节来表示。Unicode把一对字符视为一个单一的字符,而JS认为一对字符是两个不同的字符,这将会带来很多问题,考虑到代码的安全性,我们应该尽量使用基本字符进行编码名词解释Unicode标准:一种字符集标准,用于对世界上不同语言、原创 2022-02-16 20:08:57 · 472 阅读 · 0 评论 -
CommonJS
CommonJS规范CommonJS使用exports导出模块,require导入模块。exports是一个空对象,require是一个函数,参数传入模块的路径即可返回该模块导出的整个内容。导出:// 要隐藏的内部实现let abc = 1;// 要暴露给外部的接口function test(){ abc++; return abc;}// exports = {}exports.test = test;/* exports: { test: fn }*/原创 2022-01-11 01:02:39 · 313 阅读 · 1 评论 -
每日知识点&问题
目录前言模板2021-11-26问题类微信小程序点击提示找不到函数知识点类前言总结每天用到的知识点和问题模板## 2021-11-26### 问题类#### 问题一- 错误信息- 错误截图- 问题原因- 解决方法#### 问题二- 错误信息- 错误截图- 问题原因- 解决方法### 知识点类#### 知识点一- 代码 || 截图- 理解2021-11-26问题类微信小程序点击提示找不到函数错误信息:Component “…” does not have a原创 2021-11-26 16:17:33 · 308 阅读 · 0 评论 -
js基础-数据类型和运算符学习
关于typeof的一些细节typeof函数返回的类型时stringtypeof(null)使用typeof得到类型时,可以是未声明的变量,得到的值是undefined。数据类型原始类型:number,string,boolean,null,undefined引用类型:object,function…关于对象读取对象中的某个属性当读取对象的属性不存在时,会得到undefined。当读取属性的对象(对象的值为undefined或null)不存在时,会报错。原创 2021-10-27 17:48:11 · 172 阅读 · 0 评论 -
科里化函数和函数管道
科里化函数将函数一些不会变的参数固定下来,方便统一处理。在函数式编程中,科里化函数最重要的作用就是将多参函数变成单参函数。function curry(func,...args){ return function(...subArgs){ const totalArgs = [...args,...subArgs]; if(totalArgs >= func.length){ //参数够了 return func(...totalArgs); } else { //原创 2021-03-25 01:34:39 · 184 阅读 · 0 评论 -
new的原理
function new(){ const obj = {}; const fn = [].shift.call(arguments); obj.__proto__ = fn.prototype; const result = fn.apply(obj,arguments); return typeof result === 'object' ? result : obj;}原创 2021-03-23 12:45:18 · 108 阅读 · 0 评论 -
websocket
socket客户端连接服务器(TCP / IP),三次握手,建立了连接通道客户端和服务器通过socket接口发送消息和接收消息,任何一端在任何时候,都可以向另一端发送任何消息有一端断开了,通道销毁http客户端连接服务器(TCP / IP),三次握手,建立了连接通道客户端发送一个http格式的消息(消息头 消息体),服务器响应http格式的消息(消息头 消息体)客户端或服务器断开,通道销毁实时性的问题:轮询客服端写一个setInterval 隔一段时间发送一次请求询问服务器数据原创 2021-03-22 18:47:31 · 162 阅读 · 0 评论 -
搞懂promise【4】模拟源码,淦
状态数据const MyPromise = (() => { const PENDING = 'pending', //状态变量 RESOLVED = 'resolved', REJECTED = 'rejected', // 符号变量外面的访问不到 promiseStatus = Symbol('PromisrStatus'), //promise的状态 promiseValue = Symbol('prom原创 2021-03-21 23:36:11 · 300 阅读 · 0 评论 -
迭代器和生成器
迭代的理解把一堆数据按照一定的顺序拿出来的过程。再简单点就是从一堆东西中,先拿一个,再拿一个。迭代和遍历的区分迭代强调是:依次取数据,取多少,取不取完都不知道,取一个算一个。遍历强调的是:要取完,即完整性。产品迭代:这个产品最终是什么样的是不知道的,但是可以去做这产品,在过程中不断迭代更新。迭代器对迭代过程的封装。帮我们去拿数据的一个东西。通常表示为对象。迭代模式规定迭代器的功能。迭代器应该有得到下一个数据的能力。迭代器应该具有判断后面还有没有数据的能力。js中的迭代器如果一个原创 2021-03-21 01:24:26 · 241 阅读 · 0 评论 -
函数防抖(debounce)和函数节流(throttle)
防抖理解做一件事情,这件事情不是立即去做,而是要等一段时间再去做,如果在这段时间内,某件事情触发了,那么就要重新计时。例如电梯门的关闭。应用窗口尺寸的改变文本框的输入,百度搜索滚动条的滚动function debounce(callback,time){ var timer; return function(){ clearTimeout(timer); timer = setTimeout(()=>{ callback.apply(null,arguments原创 2021-03-19 16:37:06 · 208 阅读 · 0 评论 -
搞懂promise【3】
promise其它apifinally:[ES2018]注册一个后续处理函数(无参),当Promise为已决时运行该函数。为什么无参数,因为已决时,可能是resolve,也可能是rejected。传了参数不能确定是哪一个。finally的运行和注册顺序有关。const pro = new Promise((resolve, reject) => { resolve(1); }) pro.finally(() => console.原创 2021-03-18 14:05:17 · 117 阅读 · 0 评论 -
搞懂promise【2】
promise的串联当后续的Promise需要用到之前的Promise的处理结果时,需要Promise的串联Promise对象中,无论是then方法还是catch方法,它们都具有返回值,返回的是一个全新的Promise对象,它的状态满足下面的规则:如果当前的Promise是未决的,得到的新的Promise是挂起状态如果当前的Promise是已决的,会运行响应的后续处理函数,并将后续处理函数的结果(返回值)作为resolved状态数据,应用到新的Promise中;如果后续处理函数发生错误,则把返回值原创 2021-03-18 01:46:46 · 163 阅读 · 0 评论 -
【Node】Node核心
目录1-1.Node概述Node的特点通常用Node干什么1-2.全局对象1-1.Node概述Node的特点单线程,同时接受大量的请求,没有进程切换的开销,不适合进行复杂的运算,但是io速度很快,不会做任何与业务逻辑有关的事情。简单的信息的记录静态资源托管缓存通常用Node干什么开发桌面应用程序开发服务端应用程序1-2.全局对象node的全局对象setTimeoutsetIntervalsetImmediateconsole__dirname__filename原创 2021-03-17 20:24:26 · 338 阅读 · 0 评论 -
js 正则表达式
RegExp.test()函数返回boolean。匹配多少次const str = '1212abcdsf11abc11dfsd11abc12';const reg = /abc/g;let n = 0;while(reg.test(str)){ n++}console.log(`匹配了${n}次`);正则表达式默认是贪婪模式在量词后面加上?,启动非贪婪模式 如+?,??,*?。RegExp.exec()返回的匹配结果,是一个真数组,判断一个数组是不是真数组,Array原创 2021-03-17 16:52:34 · 140 阅读 · 0 评论 -
封装ajax
function ajax(obj){ obj.type = obj.type || 'get'; obj.data = obj.data || null; obj.async = obj.async || true; let xhr = null; if(window.XMLHttpRequest){ //非IE xhr = new XMLHttpRequest(); } else { //IE xhr = new ActiveXObject('Micros原创 2021-03-17 13:57:04 · 68 阅读 · 0 评论 -
js深度克隆
function deepClone(origin,target){ var target = target || {}, toStr = Object.prototype.toString, arrStr = "[object Array]"; for(var prop in origin){ if(origin.hasOwnProperty(prop)){ if(origin[prop] !== "null" && typeof(origin[prop]) == "原创 2020-12-14 17:29:42 · 140 阅读 · 0 评论 -
模块化
这里写目录标题下载nodejs判断是否安装nodejs怎么实现commonjs怎么实现模块的导出和导入有了模块化后,前端就可以开发大型应用了。模块化解决了js中的全局变量污染等问题。与浏览器环境中不一样,nodejs中js文件不是通过html页面来进行调用,而是通过commonjs来进行相互的调用。下载nodejs官网地址:https://nodejs.org/zh-cn/判断是否安装在终端输入node,显示版本就说明安装好了nodejs怎么实现commonjs为了保证高效的执行,nod原创 2020-12-03 22:04:13 · 81 阅读 · 0 评论 -
遗忘知识点汇总
目录数组方法concatMath.max()得到一个函数的形参个数柯里化数组方法concat拼接两个数组,返回一个拼接好的数组Math.max()获取最小值和最大值如果参数为数组,可以用apply解决得到一个函数的形参个数函数名.length柯里化...原创 2020-12-03 22:01:47 · 306 阅读 · 0 评论 -
【2020-12-3】随笔
bind的实现实现之前,回顾一下将类数组转化为数组有哪些方法利用改变原数组的方法slice()- slice()可以不传参数,结果就是将原数组整个切割下来返回一个数组- slice(start,end),end取不到var a = [1,2,3];var b = a.slice(); //b为[1,2,3]var c = a.slice(0,2);//c为[1,2]那么将类数组转化为数组//基于slicevar arr = Array.prototype.slice.call(原创 2020-12-03 22:00:07 · 84 阅读 · 0 评论