原生javascript
半夏的前端笔记
这个作者很懒,什么都没留下…
展开
-
javascript下载图片而不是浏览器默认打开图片
dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n)..原创 2021-05-18 09:10:10 · 1054 阅读 · 0 评论 -
函数实参为对象类型的值
let obj = {name:'wl',age:22} function person(o){ o.name='wang' o = {name:'mao',age:23} return o } person(obj) // ---> {name:'mao',age:23} obj // ---> {name:'wang',age:22} 分析: 将obj这个对象作为实参传给person这个函数,o作为形参接受,这时候o和obj两个变量原创 2021-01-18 11:01:58 · 160 阅读 · 1 评论 -
javascript类型判断
typeof:只能简单的区分原始类型,遇到数组、对象、null无法区分 instanceof:可以对数组、对象类型加以区分,但是有一种情况会出现问题:A窗口嵌套B窗口,A窗口中有一个数组arr变量,在B窗口判断 B.parent.arr instanceof Array,结果为false。 原因分析:因为instanceof不能跨窗口判断,每个窗口(即window)都有自己的构造函数,A窗口的Array和B窗口的Array不同 下面介绍两种方法可以解决跨窗口的类型判断: /** 方法一:**/对象的原原创 2020-09-23 16:09:16 · 96 阅读 · 0 评论 -
javascript深浅拷贝
let arr = [1,2,[3,4],[5,6,[7,8]]] let obj = {name:'wl',info:{age:23,name:'wl'},job:['stu']} function deepCopy(obj){ if(typeof obj != 'object')return let objType = obj.constructor.toString() if(objType.i..原创 2020-09-18 16:21:36 · 73 阅读 · 0 评论 -
重现数组reduce方法
Array.prototype.myreduce = function (fn) { let init = arguments[1] let that = this let accu if (init !== undefined) { accu = init for (let i =...原创 2020-04-27 14:52:17 · 108 阅读 · 0 评论 -
高阶函数
节流 定义:对于连续触发的函数,规定两次执行间隔时间必须不小于time值才能再次触发 //节流: function throttle(fn,time){ let start = new Date() return function(){ let now = new Date() let time_ = now - start if(time_>=time){ sta...原创 2020-04-19 17:30:58 · 111 阅读 · 0 评论 -
自己实现一个简易的promise
const PENDING = 'pending' const RESOLVED = 'resolved' const REJECTED = 'rejected' function MyPromise(fn) { let that = this that.state = PENDING that.value = u...原创 2020-04-17 20:03:54 · 181 阅读 · 0 评论 -
回调函数、promise、async的异步解决方案、Event Loop
什么是异步 异步就是把任务分成上下两段,先执行任务上半段,在转而执行其他同步任务。等到其他同步任务全部执行完毕后 || 异步状态发生了改变,再继续执行任务下半段。 回调函数 在promise出来之前,javascript处理异步一般通过回调函数,但是存在一个问题,回调函数一多的话,代码的耦合性就高了,一步错步步错,不容易维护,俗称:回调地狱。 promise是es6的一种异步解决方案 promis...原创 2020-04-15 18:49:14 · 149 阅读 · 0 评论 -
解构赋值
拥有iterator接口的数据类型…的使用方式 首先,原生javascript中的数据类型有iterator接口的有: []、arguments、string、set、map、NodeList、TypedArray 解构赋值 剩余参数 function fn(a,...b){ console.log(a) // 1 console.log(b) //[2,3] } fn(1,2,3...原创 2020-04-13 19:08:57 · 130 阅读 · 0 评论 -
call、apply、bind的原理
call内部实现 Function.prototype.call = function(context){ context.fn = this //获取函数执行的参数 let args = [...arguments].slice(1) let res = context.fn(...args) delete context.fn return res } apply内部实现 F...原创 2020-04-13 17:19:05 · 106 阅读 · 0 评论 -
数据双向绑定的两种方式
proxy数据代理 let inp = document.getElementById('inp') let oDiv = document.getElementById('box') let elems = [inp,oDiv] let obj = { value:'这是obj的初始值' } function initVal(...原创 2020-04-12 14:11:13 · 347 阅读 · 0 评论 -
for...of原理
let arr = [1,2,3] for(let i of arr){ console.log(i) } //for ... of内部的实现 try{ //将可遍历对象转换为遍历器 let iter = arr[Symbol.iterator]() let i = '' while(i != undefined){ i = iter.next().value console.l...原创 2020-04-12 10:02:49 · 270 阅读 · 0 评论