随笔分类 -  js

摘要:在js中,变量由类型标签和变量值组成。对象的类型标签为0。 而null是一个空指针,在js最初版本使用32位系统,会使用低位存储变量的类型信息,而null也是以000开头,因此null的类型标签也为0,会被识别为对象 但null是全0,这是一个bug 阅读全文
posted @ 2020-11-02 11:28 ashen1999 阅读(1895) 评论(0) 推荐(0)
摘要:JS的最初版本是这样区分的:null表示一个“无”的对象,转换为数值时为0;undefined表示一个“无”的原始值,转换为数值时为NaN 而现如今,null被当作原本就不应有值,常见用法有: 作为函数的参数,表示函数的参数不是对象; 表示对象原型链的终点。 undefined表示“缺少值”,即此处 阅读全文
posted @ 2020-11-02 11:21 ashen1999 阅读(208) 评论(0) 推荐(0)
摘要:对于ajax请求来说,当请求另一个域名时,其实请求已经到达服务器。但是需要有响应数据,浏览器认为这是不安全的,所以被同源策略限制了 而form提交的表单数据不需要相应数据,所以是安全的,可以跨域 阅读全文
posted @ 2020-10-29 10:48 ashen1999 阅读(321) 评论(0) 推荐(0)
摘要:在ES5中,比较好的继承方式时,通过构造函数继承,继承属性;再通过原型链继承,继承方法; 而ES6中,直接通过extends关键字进行继承。 它们主要的区别在于: ES5中,先创建子类的实例this,再通过父类构造函数或原型向其上添加属性或方法;而ES6中,是先通过super创建父类实例this,再 阅读全文
posted @ 2020-10-29 09:30 ashen1999 阅读(354) 评论(0) 推荐(0)
摘要:根据闭包保存变量的特性,可以有以下的使用场景。 setTimeout的回调函数传参 function f1(a){ return function(){ console.log(a) } } var fun = f1(10) setTimeout(fun, 1000) 防抖 function deb 阅读全文
posted @ 2020-10-28 13:06 ashen1999 阅读(208) 评论(0) 推荐(0)
摘要:forEach是用来遍历数组的方法,不会更改数组的值;不能使用continue、break等跳出循环。 for...in...主要用于遍历对象,取到键值对中的键。但也可以用来遍历数组。 for...of...用来遍历实现了Symbol.iterator的类数组数据类型。如数组、map、set、str 阅读全文
posted @ 2020-10-28 11:23 ashen1999 阅读(151) 评论(0) 推荐(0)
摘要:两者都是用来处理异步回调问题的。而async/await能将异步处理的像同步一般。 那么async/await相比于promise有什么优点呢? 简洁。前者不需要写.then,不需要给传入resolve和reject的匿名函数,也不需要定义data变量,节约了代码,也提升了可读性。 错误处理。前者可 阅读全文
posted @ 2020-10-28 10:49 ashen1999 阅读(640) 评论(0) 推荐(0)
摘要:1.参数是promise实例,直接返回这个实例本身,不做处理。 2.参数是一个thenable对象,即其中实现了then方法。则会将此对象生成为一个promise,状态为resolved,并调用其then方法。 3.参数是一个原始类型的数据,则直接返回一个状态为resolved的promise,并将 阅读全文
posted @ 2020-10-28 10:18 ashen1999 阅读(2011) 评论(0) 推荐(0)
摘要:在CommonJs中,通过exports或module.exports来导出模块中的内容,通过require来导入 在ES6中,通过export或export default来导出模块中的内容,通过import来导入 他们的主要区别有: CommonJS中,对于导入的数据,如果是原始类型的数据,是进 阅读全文
posted @ 2020-10-23 09:41 ashen1999 阅读(181) 评论(0) 推荐(0)
摘要:我们通常所说的跨域,就是指被同源策略限制了的请求场景。 什么是同源策略? 同源策略/SOP(Same origin policy)是一种约定,所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 常用解决方案 jsonp 通过动态生成script,设置src为请 阅读全文
posted @ 2020-10-19 14:08 ashen1999 阅读(223) 评论(0) 推荐(0)
摘要:之前一直对这两个概念模棱两可,最近面试被问到时,答的很差,才认真看了看。 session 存储于服务端。当浏览器打开某个窗口时,服务端就会为这个窗口,分配一个独一无二的sessionId,用来标识session。从打开此窗口到关闭为止,是一次会话,而session就是用来存储会话中的数据、状态等等。 阅读全文
posted @ 2020-10-18 15:44 ashen1999 阅读(80) 评论(0) 推荐(0)
摘要:纯后端渲染 纯后端渲染是指:浏览器向服务器发送请求后,服务器把各个数据等拼接为dom树,并将整个dom树返回给客户端,由前端进行的操作很少,只需浏览器解析即可。 优点:返回的HTTP Response是包含着全部页面内容的,相对来说页面的主体DOM结构都会在这个响应中返回,可以让用户更快的看到页面的 阅读全文
posted @ 2020-10-13 20:35 ashen1999 阅读(551) 评论(0) 推荐(0)
摘要:ECMAScript 5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码显示地 脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。 严格模式不仅仅是一个子集:它的产生是为了形成与正常代码不同的语义。 不支持严格模式与支持严格模式的浏览器在执行严格模式代码时会采用不同行 阅读全文
posted @ 2020-09-24 10:25 ashen1999 阅读(146) 评论(0) 推荐(0)
摘要:vue和react已然是目前最受欢迎的前端开发框架,但公司依然有个项目使用的是jQuery开发。之前面试的时候,也有面试官问,什么项目适合使用jQuery开发呢? jQuery jQuery无疑是将web开发带向标准化的领路人,兼容了各大浏览器,且包含了各种好用的插件。 但是jQuery体积大,不太 阅读全文
posted @ 2020-09-21 17:01 ashen1999 阅读(4004) 评论(0) 推荐(1)
摘要:在公司的项目中,多次用到blob对接口返回的二进制数据进行处理,实现下载效果。但都是照葫芦画瓢,所以今天来分析一下其不同的用法 下载文件到本地 通过创建a标签,添加download属性来实现 var blob = new Blob(data) // data为二进制数据 var URL = wind 阅读全文
posted @ 2020-08-18 16:38 ashen1999 阅读(688) 评论(0) 推荐(0)
摘要:ArrayBuffer是一个字节数组,但是与Array并不相同。 ArrayBuffer不支持push和pop方法 ArrayBuffer存储在栈中 ArrayBuffer是只读的,但可以通过DataView或TypedArray进行改写 MDN上已经有的内容这里就不再赘述,主要记一下上面的第三点的 阅读全文
posted @ 2020-08-18 16:37 ashen1999 阅读(551) 评论(0) 推荐(0)
摘要:最近又在看vue响应式的源码,发现了之前没注意到的一个点: 当实现指令解析器Compile的时候,是通过创建文档碎片,将原本的dom树中的节点一个个添加到文档碎片中: // el 是传入的DOM树 var f = document.creatDocumentFragment() var firstC 阅读全文
posted @ 2020-08-02 08:53 ashen1999 阅读(283) 评论(0) 推荐(1)
摘要:let blob = new Blob([response.data], {type: 'application/pdf;charset=UTF-8'}); let fileURL = URL.creatObjectURL(blob) 且将响应头的responseType设置为arraybuffer 阅读全文
posted @ 2020-07-26 16:56 ashen1999 阅读(9321) 评论(1) 推荐(1)
摘要:新建一个a标签,设置不显示在页面中,download属性,添加给body,并在下载后移除 var alink = document.creatElement('a') alink.style.display = 'none' alink.href = fileURL alink.setAttribu 阅读全文
posted @ 2020-07-26 16:48 ashen1999 阅读(276) 评论(0) 推荐(0)
摘要:当请求或计算时,如果每次都进行重新请求或计算,非常损耗CPU性能,因此可以通过缓存将之前的记录保存下来,当请求某已经请求过的资源时,就可以直接使用缓存了。 封装如下: function memoize(fn){ return function(){ var args = Array.prototyp 阅读全文
posted @ 2020-05-25 10:31 ashen1999 阅读(180) 评论(0) 推荐(0)