JavaScript
文章平均质量分 80
JavaScript
想成为大佬的鸭子
这个作者很懒,什么都没留下…
展开
-
JavaScript——中断请求的几种方案
1 PromisePromise有一个缺点是一旦创建无法取消,所以本质上Promise是无法被终止的.但是我们可以通过中断调用链或中断Promise来模拟请求的中断.中断调用链中断调用链就是在某一个then/catch执行之后,后续的链式调用(包括then,catch,finally)不再继续执行.方法是在then/catch返回一个新的Promise实例,并保持pending状态:new Promise((resolve, reject) => { setTimeout(() =原创 2021-09-08 15:10:31 · 3475 阅读 · 0 评论 -
JavaScript实现排序算法(5)——选择排序,树形选择排序,堆排序
选择排序1 简单选择排序简单选择排序的核心思想是不断地找出未排序数列的最小值,将其添加到有序数列的尾部.(当然也可以选择最大值)1.1 算法过程(从小到大排序)1. 在待排数列中找到最小(或最大)元素,存放于有序数列的起始位置;2. 从余下待排数列中找到最小(或最大)元素,存放于有序数列的末尾(或开头);3. 重复第二步,直到所有元素排序完毕.1.2 排序演示对下面的数列进行简单选择排序5, 3, 2, 4, 1设置两个指针,指针a指向待排数列起始位,指针b指向待排数列末位.5,原创 2021-08-03 12:41:32 · 276 阅读 · 0 评论 -
JavaScript实现排序算法(4)——直接插入排序和希尔排序
插入排序1 直接插入排序直接插入排序的核心思想是,待排数列一个一个地插入有序数列,不断扩大有序数列,直到待排数列为空.1.1 算法过程(从小到大排序)1. 单个数字一定有序,因此数组首项可以看做一个有序数列,剩余的项组成待排数列;2. 从头到尾依次扫描待排数列,将扫描到的每个元素插入有序数列的适当位置.(如果待插入的元素与有序数列中的某个元素相等,则将待插入元素插入到相等元素的后面)1.2 排序演示对下面数列进行直接插入排序:5, 3, 2, 4, 1将数列首项5作为有序数列,待排数原创 2021-08-03 12:40:57 · 135 阅读 · 1 评论 -
JavaScript实现排序算法(3)——归并排序
归并排序归并排序的分治思想的典型应用,先分再合1 算法过程(从小到大排序)分治:1. 将原数列对半分为两个子数列,分别对两个子数列进行排序;2. 对子数列进行排序时,重复第一步;合并:1. 申请空间,大小为两个`已排序的`子数列之和,该空间用来存放合并后的数列;2. 设定两个指针,最初位置分别为两个子数列的起始位置;3. 比较两个指针所指向的元素,选择较小的元素放入第一步申请的空间,并移动该指针到下一位;4. 重复第三步,直至有一个子数列的指针超出数列尾;5. 将另一个子数列的元素直原创 2021-08-03 12:40:34 · 131 阅读 · 0 评论 -
JavaScript实现排序算法(2)——快速排序
快速排序快速排序是对冒泡排序的一种改进,被认为是目前最好的一种内部排序方法.快速排序的核心思想是分治思想,先分再合.1 算法过程(从小到大排序)1. 设定一个分界值(分界值任意,一般是数列首值,或数列中间值);2. 将不大于分界值的数置于分界值左边,大于分界值的数置于分界值右边,从而将数列以分界值为分割点,分割为左右两个数列.3. 对左右两个数列,分别重复上面的步骤.4. 左、右两个数列各数据排序完成后,整个数列的排序也就完成了2 排序演示对下面的数列进行快速排序3, 4, 6, 5原创 2021-08-03 12:40:03 · 109 阅读 · 0 评论 -
JavaScript实现排序算法(1)——冒泡排序
冒泡排序冒泡排序的核心思路,就是每一轮都把最大的数"冒"到数组顶部.1 算法过程(从小到大排序)1. 每一轮排序,都从第一个数开始,比较相邻的数;2. 如果第一个数比第二个数大,则交换两个数的位置;3. 如果第一个数不大于第二个数,则不交换位置,开始比较第二个数和第三个数;4. 以此类推,直到比完最后两个数,选出数列最大值置于末尾;5. 待排数列更新为原数列减去末尾值,开始下一轮排序,重复上面的步骤;2 排序演示对下面的数列进行冒泡排序:3, 4, 1, 5, 2第一轮排序开始,原创 2021-08-03 08:59:17 · 1489 阅读 · 0 评论 -
原生js——实现ios辅助触控的悬浮球案例
用过iphone的都知道,ios系统有一个重要的功能——辅助触控,可以让我们在触摸屏幕有困难或需要自适应配件的情况下使用iphone.辅助触控中,悬浮球充当着重要角色,它置顶悬浮在屏幕边缘,可任意移动,既不影响用户正常操作系统,又能提供许多功能的快速入口.实际上,在很多app我们也能看到类似的交互,例如微信前几个版本的浮窗效果.那么原生js怎么实现这一交互效果呢?实现思路实现悬浮球的拖拽,原理是改变球的位置.如果以绝对定位(position: absolute)的方式来决定小球的位置,那么关键原创 2021-07-24 00:00:47 · 1386 阅读 · 1 评论 -
JavaScript 同步和异步
本篇博客整理了一下我对JavaScript同步和异步的简单理解,我认为还是比较详细和好懂的。其中部分借鉴了阮一峰前辈的博客(博客链接突然失效我找不到了),在这里先感谢阮一峰前辈以及其他前辈的解释~一、为什么JavaScript是单线程?JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。Ja...原创 2019-10-20 17:13:54 · 153 阅读 · 0 评论 -
JavaScript——原型链?继承?组合继承?看这篇够啦
一、原型链理解原型链,首先要理解一个三方关系.三方指的是构造函数,构造函数实例,以及原型prototype,先上图:1.1 构造函数原型 prototype我们常用new一个构造函数的方式来创建实例.这样的方式很好用,但是存在浪费内存的问题。来看一个例子:function Person(name) { this.name = name; this.sayName = function() { console.log(this.name); }}cons原创 2021-07-22 16:24:22 · 138 阅读 · 4 评论 -
JavaScript-DOM和BOM学习笔记——持续更新
本篇整理了一下DOM的一些基础知识,目前记录的知识还比较基础,更深的知识尚未整理。往后将继续学习和补充。如有记录得不对的地方,欢迎探讨。目录DOMDOM操作元素操作创建元素添加节点删除元素修改元素获取元素属性操作事件操作事件的三要素事件注册删除事件(解绑事件)事件类型DOM事件流事件对象事件委托BOMwindow对象的常见事件1 窗口加载事件load2 窗口加载事件DOMContentLoad...原创 2019-11-04 15:08:12 · 355 阅读 · 0 评论 -
JavaScript-再谈闭包
之前写过一篇浅谈闭包的博客(https://blog.csdn.net/weixin_41309331/article/details/102649282)但当时并没有从原理性的入口来讲起闭包。这几天复习《JavaScript高级程序设计》(第三版)时,整理了一些原理性的知识。实际上,要讲闭包,得先理解JavaScript中作用域链的概念,作用域链也是理解全局不能引用局部变量,局部可以引用全局...原创 2020-03-07 12:56:30 · 99 阅读 · 0 评论 -
js中json字符串与json对象格式转换
本篇博客整理记录了一下js和json之间转换的几种情况和方法,顺便记录一下自己在工作上遇到的一个小问题(看似很简单!但当时头脑不清醒写了很久!敲篇博客敲打自己)最近在公司开发一个页面,由于element框架的需要,我需要接口给我返回下面这种格式的数据:initialData: [ { id:1, title: "标题1", dataObj: {...原创 2019-11-29 11:17:07 · 617 阅读 · 0 评论 -
JavaScript——够正的正则表达式!!!
**正则表达式( Regular Expression )**是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单字符和特殊字符的组合,比如原创 2021-07-21 16:51:12 · 126 阅读 · 1 评论 -
JavaScript 浅谈浅拷贝和深拷贝
深拷贝和浅拷贝在各大语言中都有体现,这篇博客谈谈我对JavaScript中深浅拷贝的理解。浅拷贝浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用地址。这句话怎么理解呢?来看下面这个例子:let obj = { id: 1, name: '李小龙', message: { age: 18 }}let o = {}我现在想要对象o拷贝对象obj,浅...原创 2019-10-20 16:52:29 · 185 阅读 · 0 评论 -
JavaScript 对象方法—— Object.keys() 和 Object.defineProperty()
ES5有两个常用的对象方法:1 Object.keys()语法:Object.keys(obj)说明: Object.keys() 用于获取对象自身所有的属性; 效果类似for...in...; 返回一个由属性名组成的数组。 举例:var obj = { id: 1, pname: '小米', price: 1999,...原创 2019-10-20 16:30:55 · 570 阅读 · 0 评论 -
ES6学习笔记——持续更新
本篇整理了一下ES6的一些常用基础知识,关于ES6的知识将会继续学习和补充。如有记录得不对的地方,欢迎探讨。目录ES6规范为什么使用ES6?let关键字const关键字var、let、const 对比:对象字面量的增强写法属性的增强写法函数的增强写法解构赋值数组解构对象解构箭头函数箭头函数中的this箭头函数经典面试题剩余参数ES6内置对象扩展数组的扩展方法...扩展运算符构造函数方法:Arr...原创 2019-11-04 15:02:10 · 249 阅读 · 0 评论 -
JavaScript-相等和全等操作符
JavaScript中的相等操作符分为两组,一组是相等(==)和不相等(!=),一组是全等(===)和不全等(!==)。1 相等(==)和不相等(!=)相等和不相等操作符在比较的时候,会对比较的操作数进行强制转型,即先转换再比较。它遵循以下的基本规则:1. 如果有一个操作数为布尔值,则在比较相等性之前先将其转换为数值——false为0,true为1;2. 如果有一个操作数为字符串,...原创 2020-03-02 12:14:14 · 410 阅读 · 0 评论 -
JS执行机制——单线程,同步异步,宏任务微任务,Event Loop
JS执行机制一、什么是进程和线程?本质上来说,这两个名词都是CPU工作时间片的一个描述;进程描述了CPU在运行指令及加载和保存上下文所需的时间,放在应用上来说就代表了一个程序。线程是进程中的更小单位,描述了执行一段指令所需的时间;把这些概念拿到浏览器来说,当你打开一个Tab页,其实就是创建了一个进程,一个进程中可以有多个线程,如渲染线程,JS引擎线程,HTTP请求线程等等。比如,当你发出一个请求时,其实就是创建了一个线程,当请求结束后,该线程可能就会被销毁。二、JavaScript为什么是单线程?原创 2021-03-17 16:38:44 · 209 阅读 · 2 评论 -
JavaScript实现五种排序算法
最近复习一些数据结构的算法,想着既然弄熟了JavaScript,倒不如用JavaScript来实现一下。算法的分析我觉得百度百科讲的已经很好了,因而做出了截图百科的猥suo行为。本篇博客主要是想贴一下用JavaScript实现的代码。在算法的世界里,排序算法有很多,我所知道的经典的有下面这么十个:1 冒泡排序(一)算法过程: 比较相邻的元素。如果第一个比第二个大,就交换他们两个...原创 2020-03-08 22:55:32 · 540 阅读 · 0 评论 -
JavaScript——关于数组
很久之前写过一篇js常用数组,随着对这门语言的学习,感觉之前写的一些笔记都太浅了.写篇巩固一下基础(为什么不在原文修改,因为富文本实在太烦人了!还是MarkDown香)判断是否为数组的方法?优缺?不能用typeof,typeof只能判断数组为objecet,不能明确其为Array;不能用.length,因为其他诸如函数也有length属性;instanceof可以判断,instanceof是通过原型链去判断数据类型的,但是存在框架问题Array.isArray()可以判断,老版本的原创 2021-07-21 15:28:46 · 274 阅读 · 1 评论 -
JavaScript 数组常用方法
本篇博客主要讨论ES6之前的数组常用方法,ES6的常用知识将会在之后的博客中记录。创建数组的基本方式1. 使用Array构造函数:var arr = new Array()//表示创建length为3的数组var arr = new Array(3)//表示创建包含这几项的数组var arr = new Array('red','yellow','blue')2.字...原创 2019-10-20 16:16:47 · 197 阅读 · 0 评论 -
JavaScript 浅谈闭包
在理解闭包是个什么玩意儿之前,我们先来看看JavaScript中的变量作用域,因为闭包和它有着紧密联系。在JavaScript中,变量根据作用域的不同分为两种:全局变量和局部变量。 函数内部可以使用全局变量。 函数外部不可以使用局部变量。 当函数执行完毕,本作用域内的局部变量会销毁。 什么是闭包?在《 JavaScript 高级程序设计 》一书中,给出了闭包的...原创 2019-10-20 15:34:20 · 137 阅读 · 0 评论 -
JavaScript 中组合继承、类与extends继承
ES6中新增了类的语法。类使用起来非常方便,但是在讲类之前,我们先来看看在类出生之前,强大的JavaScript是以什么样的方式让构造函数之间进行继承的——组合继承。1 组合继承ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。1.1 借用构造函数继承父类型的属性1.1.1 call() 方法功能:调用这个函数, 并且...原创 2019-09-19 20:13:36 · 1006 阅读 · 0 评论 -
JavaScript 中原型链详解
JavaScript 中原型链是一个非常重要的知识。先来看一段代码:function Person(name, age){ this.name = name this.age = age}Person.prototype.sayName = function() { console.log(this.name)}var person1 = new Person('刘德华'...原创 2019-09-19 18:09:10 · 250 阅读 · 0 评论 -
JavaScript 创建对象的五种方法
JavaScript 是一门面向对象的编程语言(Object Oriented Programming),面向对象编程具有灵活、代码可复用、容易维护和开发的优点,更适合多人合作的大型软件项目。在 JavaScript 中,有这么一句话:“万物皆对象”。 对象是一组无序的相关属性和方法的集合,例如字符串、数值、数组、函数等。这即是说,对象是由属性和方法组成的: 属性:事物的特征,在对象中用...原创 2019-09-19 16:46:13 · 167 阅读 · 0 评论 -
Node.js——一个简单的Express后端API开发
Express是node.js的web开发框架,它有如下特点:unopinionated:框架本身只提供最小web应用开发API;不限制应用设计模式(MVC,MVP);不限制代码规范;不限制功能的选择,例如是否有视图层生成HTML页面Express实现简单的后端API开发项目初始化初始化项目npm init -y # 初始化npm add express # 添加express依赖在根目录新建app.jsconst express = require('express原创 2021-07-14 00:07:55 · 863 阅读 · 0 评论 -
JavaScript——听说你想手写Promise
手写一个Promise下面是Promise的一个简单用法:const p1 = new Promise((resolve, reject) => { resolve('success'); reject('error');});p1.then(res => { console.log(res); // 打印success}, err => { console.log(err); // 没有打印});我们可以自己手写一个Promise来实现上原创 2021-03-23 20:04:21 · 118 阅读 · 0 评论