![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaScript
背包Boy
朽木也,穷其一生自雕。心已觉累,没有眼泪。
个人博客:http://lawsan.xyz
展开
-
原生JavaScript获取某一段时间内的所有日期列表
原生JavaScript处理某段时间的所有日期列表原创 2022-10-21 13:50:50 · 732 阅读 · 1 评论 -
Vue的v-model实现原理
<input v-model="inputValue" /><input :value="inputValue" @input="inputValue = $event.target.value" />第二行是第一行的语法糖。原生JS实现v-model<body> <input type="text" id="inputModel"> <p id="p"></p></body><script&g原创 2021-04-02 14:45:24 · 272 阅读 · 0 评论 -
JS判断一个数是不是整数
let a = 1,b = 1.1ES6的Number.isIntegerNumber.isInteger(a) //trueNumber.isInteger(b) // falseparseIntparseInt(a) == a // trueparseInt(b) == b // falseString+indexOfString(a).indexOf('.') == -1 // trueString(b).indexOf('.') == -1 // falseNumber原创 2021-04-02 11:08:55 · 387 阅读 · 0 评论 -
JS手写数组map、filter、reduce方法
// reduceArray.prototype.myReduce = function(fn,initValue) { let acc = initValue || this[0] let startIndex = initValue ? 0 : 1 for(let i = startIndex; i < this.length; i++) { acc = fn(acc,this[i],i,this) } return acc}// mapArray.prototype.myM原创 2021-03-29 19:25:59 · 454 阅读 · 0 评论 -
JS函数链式调用,实现一下task().eat().sleep(2000).eat().sleep(2000)函数
let index = 0 let stack = [] function next(){ let fn = stack[index] index++ if(typeof fn === 'function') { fn() } } function T(name) { stack.push(function() { console.log('Hi! This is' + name) next() }) }原创 2021-03-26 15:45:56 · 742 阅读 · 0 评论 -
JS数组去重
function uniqueArr(arr) { // es6 Set return [...new Set(arr)] // sort + splice arr.sort((a,b) => a - b) for(let i = 1; i < arr.length; i++) { if(arr[i] == arr[i - 1]) { arr.splice(i,1) i-- } } // indexOf + splice原创 2021-03-25 16:01:01 · 803 阅读 · 0 评论 -
排序算法
快速排序const quickSort = (arr,left,right) =>{ if(left < right){ let piv = getPiv(arr,left,right) quickSort(arr,left,piv - 1) quickSort(arr,piv + 1,right) } } const getPiv = (arr,left,right) =>{ let piv = arr[left] while(原创 2021-03-25 15:34:57 · 104 阅读 · 0 评论 -
JS实现矩阵的顺序打印与换原
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 :输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]function spiralOrder( matrix ) { if(!matrix.length) return [] // write code here let ans = [],t = 0,l = 0,r = matrix[0].length - 1, b = matrix.le原创 2021-03-22 11:03:54 · 535 阅读 · 0 评论 -
JS设计模式
/* JS 单例模式 只能有一个实例,已经有实例则返回该实例,否则创建一个实例并返回 */ class SignleObject { constructor(name) { this.name =name } getName() { console.log(this.name) } static getInstance(name) { if(this.instance) return this.instance t.原创 2021-03-18 12:23:58 · 111 阅读 · 4 评论 -
手写Promise.all、new、instanceof、深拷贝、call/apply/bind、防抖/节流、JSONP、Object.create、继承、ajax
// promise.allfunction PromiseAll(promises) { return new Promise((resolve, reject) => { if (!Array.isArray(promises)) throw new Error('arguments must be an array') let promisesNum = promises.length let resValue = new Array(promisesNum)原创 2021-03-17 12:06:05 · 164 阅读 · 0 评论 -
JS实现不用运算符“+“,“-“,“*“,“/“实现加减乘除运算
// 相加 function add(a, b) { // 相加 a,b异或 while (b) { var c = (a & b) << 1 a = a ^ b b = c } return a } // 相减 function subtract(a, b) { // a - b 等于 a + (-b); -b等于 b取反加1 var tmpB = add(~b, 1) ret.原创 2021-03-15 11:54:17 · 1189 阅读 · 0 评论 -
一文带你了解JavaScript深拷贝
深拷贝之前的文章我也写过,今天就来重新了解一下JavaScript的深拷贝吧。拷贝是啥?顾名思义也就是复制,我们知道在JavaScript中基本数据类型都是保存在栈中的,而复杂数据类型(object)是保存在堆中的,在栈中不过是保存了堆的地址(引用)。浅拷贝与深拷贝浅深拷贝都是对引用类型的数据而言的,基本数据类型一赋值就开辟了独立的栈空间,互不影响。浅拷贝:当我们对基本数据类型复制,会把值全部复制过去的。如果是引用类型,也是把值复制过去,不过这个值是地址引用。这样如果其中一个对象改变了这个地址,原创 2020-07-20 15:12:24 · 155 阅读 · 0 评论 -
浅谈JavaScript数组去重
在开发时总会遇到这样的需求,就是不要保存重复的数据,要不然会造成数据多余,内存浪费。所以要去重1、ES6的Set基本思路:利用Set对象的去重function unique(arr){// return Array.from(new Set(arr)) return [...new Set(arr)];}2、filter过滤基本思路:利用filter对数组进行过滤,过滤条件就是第一次出现的值和它的索引相对应。第二次出现该值时,arr.indexOf(item)还是第一次的index,所以去原创 2020-05-22 14:31:39 · 125 阅读 · 0 评论 -
Promise
Promise是什么?抽象表单:Promise是JS异步编程的新解决方案(旧的是回调)具体表达:从语法上来说:Promise是一个构造函数从功能上来说:promise对象是用来封装一个异步操作并可以获取其结果promise状态改变初始为pendingpending变为resolvedpending变为rejected说明:只有这两种改变,且一个promise对象只能...原创 2020-03-11 15:32:52 · 108 阅读 · 0 评论 -
手写JavaScript代码
实现一个new首先说说new操作符的作用new操作符会返回一个对象,所以我们需要在内部创建一个对象。这个对象,也就是构造函数中的this,可以访问到挂载在this上的任意属性。这个对象可以访问到构造函数原型上的属性,所以需要将对象与构造函数链接起来。返回原始值需要忽略,返回对象需要正常处理。//第一种写法function _new(){ let obj = {} let Co...原创 2020-03-07 13:46:32 · 180 阅读 · 0 评论 -
一文弄懂JavaScript事件循环Event Loop
单线程我们知道JavaScript是一门单线程语言,一个页面所有的JavaScript代码都是一行一行的执行,如果中间出现错误,那么下面的代码就不会执行,就行alert()一样,如果没有点击确定,alert下面的代码就不会执行。JavaScript单线程也符合了页面的交互逻辑,不能对同一个DOM元素进行同时更改。任务队列任务可以分为同步任务和异步任务同步任务:在主线程上排队执行的任务;同步...原创 2020-03-03 17:00:40 · 152 阅读 · 0 评论 -
JavaScript防抖、节流以及深拷贝
防抖在一些事件中,可能会频繁的触发,这样操作内存使用效率低,就比如拉到页面底部加载时,scroll事件就会触发很多次,我们只希望它触发一次ajax请求;实现:function debounce(fn,delay){ let timeout = null return function(){ if(timeout) clearTimeout(timeout) //如果还在滚动,清除计时...原创 2020-03-01 20:37:19 · 158 阅读 · 0 评论 -
JavaScript闭包是个啥?
定义函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。在JavaScript,函数在每次创建时生成闭包。通俗的说就是:定义在一个函数内部的函数,并且该被函数访问外部函数作用域只有调用外部函数时才会生成新闭包,不然就是同一个闭包作用域链对变量进行访问时,最先在自己的作用域中查找,如果找...原创 2020-02-29 20:49:27 · 98 阅读 · 0 评论 -
JavaScript对象创建与对象的继承
创建对象Object 构造函数创建这种方式创建对象代码比较多,每创建一个对象都要写很多代码,一般不用let personal = new Object()personal.name = 'wangwu'personal.age = 18console.log(personal) //{name: "wangwu", age: 18}字面量创建这种方式创建对象,比较简洁,开发...原创 2020-02-20 22:27:12 · 71 阅读 · 0 评论 -
Promise,async await,怎么用?
我们知道程序有两种运行方式,同步和异步。异步和同步异步,操作之间没有关系,同时执行多个操作, 代码复杂同步,同时只能做一件事,代码简单Promise 对象用同步的方式来书写异步代码Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数改善了可读性,对于多层嵌套的回调函数很方便充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接P...原创 2020-02-13 16:49:42 · 94 阅读 · 0 评论 -
两个HTML页面之间的传值
通过url传值通过cookie传值当然传值方式不只是这两种,我就简单说说这两种传值方式。url传值首先写两个简单页面,这里就写了test8.html和test10.html。test8.html&amp;amp;lt;!DOCTYPE html&amp;amp;gt;&amp;amp;lt;html&amp;amp;gt; &amp;amp;lt;head&amp;amp;gt; &原创 2018-11-17 16:01:30 · 1016 阅读 · 2 评论 -
JavaScript函数的callee、arguments、caller、call()、apply()、bind()
此文浅谈JavaScript函数中的一些属性和方法在函数内部,有两个特殊的对象:arguments 和 this;this函数在执行时,会在函数体内部自动生成一个this指针。谁直接调用产生这个this指针的函数,this就指向谁。arguments它是一个类数组对象,包含着传入函数中的所有参数。arguments.length 参数的个数function doAdd(){ if...原创 2019-07-24 12:24:19 · 133 阅读 · 0 评论