随笔分类 - 前端技术栈 / JavaScript
摘要:手写foreach /** * forEach(cb,thisArg) * cb : (value: any, index: number, array: any[]) => void, thisArg?: any): void * 接受第二个参数thisArg,只是定制forEach中this的指
阅读全文
摘要:正则匹配指定规则字符串的中间内容 假设前缀为prefix,后缀为suffix /prefix(.*)suffix/
阅读全文
摘要:js开发中可用的位运算 按位与判断数值是否相等 &:按位与,位数都为1才返回1 可用来对2的次幂数做比较 1、2、4、8、16、32、64 0b0001 0b0010 0b0100 0b1000 0b10000 0b100000 0b1000000 左右移 >> 带符号右移 >>> 无符号右移 2
阅读全文
摘要:/* let arr = [ { id: 1, name: '部门1', pid: 0 }, { id: 2, name: '部门2', pid: 1 }, { id: 3, name: '部门3', pid: 1 }, { id: 4, name: '部门4', pid: 3 }, { id: 5
阅读全文
摘要:
阅读全文
摘要:const obj = { a: { b: 1, c: 2, d: { e: 5 }, }, b: [1, 3, { a: 2, b: 3 }], c: 3 } /* { 'a.b': 1, 'a.c': 2, 'a.d.e': 5, 'b[0]': 1, 'b[1]': 3, 'b[2].a':
阅读全文
摘要:js逗号运算符 按照从左到右的顺序运算,返回右边的值 babel编译的时候常看见这种case (0,a.fn)(arg) 其实就是让fn中的this指向window var temp; temp = a.fn() // this window temp() reduce 当数组长度为1,调用redu
阅读全文
摘要:跨域 什么是跨域? 违反了浏览器同源策略的都是跨域 同源策略 何谓之同源? 同源即同协议、同域名、同端口,否则为跨域 同源策略会阻止一个域的JavaScript脚本和另外一个域的内容进行交互 跨域的表现 跨域例: http://www.test.cn:3000 https://www.test.cn
阅读全文
摘要:iconfont使用 1 单个icon使用 直接下载png、svg、ai等放在html中使用 svg 可以通过fill控制颜色 通过width和height控制大小和形状 应用场景 这种情况适合用在图标引用少、以后也不需要特别维护的场景 比如设计师用来坐demo原型,前端临时做个活动页面 <svg
阅读全文
摘要:箭头函数 箭头函数是ES6的新特性,简化了函数的写法 普通函数 this指向调用者 具有prototype this指向可以被call/apply/bind改变 普通函数的this在运行时创建,箭头函数的this是声明时确定 匿名函数 表现为function后面不带名字的函数,但是可以用一个变量接收
阅读全文
摘要:JS函数参数传递的问题 思考以下代码打印结果 function test(o) { o.age = 50; o = { name: 'li si', age: 100 } return o; } const boy = { name: 'zhang san', age: 16 } const boy
阅读全文
摘要:EventLoop 宏任务和微任务 js中用来存储执行回调函数的队列包括2个不同的特定的队列,即宏队列和微队列 宏任务包括定时器、ajax异步回调、事件回调 微任务包括promise,mutation 需要明确的是,所有函数,不论宏任务队列微任务队列或者是同步执行的函数,最终都是要放到在栈里面调用执
阅读全文
摘要:async/await ES7语法糖,基于Promise,处理异步任务更加方便 async 函数的返回值为promise对象,promise对象的结果由async函数执行的返回值决定 /* async: async不一定需要await,但是await一定需要async 加了async之后,函数的执行
阅读全文
摘要:初探Promise 中断与异常传送 Promise是JavaScript ES6对于异步任务的解决方案 从语法上来说,Promise是一个构造函数,通过new关键字来新建对象 从功能上来说,Promise用来封装一个异步操作,无论异步操作是成功或失败,Promise都将承诺给你返回一个确切的答案,一
阅读全文
摘要:Map map的主要特点在于,除了字符串之外,它还可以使用其他类型来作为键值对的键。 Map的实例化 所有实现了iterable接口的双元素数组结构都可以作为Map构造的参数。 如数组,map,set //数组作为实例化参数 let params = ['key1', 'value1'] let m
阅读全文
摘要:Set 之前学习了Set,好久没用又忘了,现在复习一遍,做个记录,方便以后查阅 先打印一下Set实例,看看里面都有些什么 Set类 Set类的构造函数是Set()本身,可以传入参数对Set实例进行初始化,但是这个参数必须实现了Iterable接口,Array、Map、Set都实现了iterable接
阅读全文
摘要:JavaScript 浅复制与深复制 1 赋值 在JavaScript中,基本数据类型存在栈中,对象作为引用数据类型存在堆中。 JavaScript赋值,对于栈中基本数据类型的赋值,操作的是栈,传递的是值;对于堆中对象的赋值,操作的是栈,传递的是引用。 以下主要讨论堆中的赋值。 如 obj = ob
阅读全文
摘要:websocket 简介 "webSoket" 是HTML5提供的一种在单个TCP连接上进行全双工通讯的协议。 特点: 主要优点在于服务端主动向客户端推送数据以及实时通讯。 允许服务端主动向客户端推送数据。一次握手动作就创建持久连接,进行双向数据传输。 在没有websocket之前采用Ajax轮询(
阅读全文
摘要:delete 语法:Boolean delete obj.property 主要用于删除对象的属性,删除成功或失败会返回相应布尔值 可以删除非关键字定义的全局变量(var a = 1不能被删除,a= 1可以) 删除对象中不存在的属性会返回true 删除数组元素不会改变数组的长度(索引不变),被删除的
阅读全文
摘要:前端路由 前端路由的本质是监听url变化,然后匹配路由规则,去做一些dom的增删或替换,无需刷新就可以显示相应的页面,目前单页面路由主要有两种方式 hash 模式 history 模式 hash模式实现路由 为什么要使用hash模式:页面使用Ajax发送异步请求可以实现无缝刷新,但这种方式也存在使得
阅读全文