前端
文章平均质量分 84
一笑程序猴
工欲善其事,必先利其器
展开
-
【NodeJs】基于nodejs加koa2搭建一个的后端服务框架并实现一个简单的token生成及校验功能
背景最近在学习nodejs以及相关框架koa。后来发现学习时是学会了,但是没过多久再想使用时又忘了,于是决定通过一个小demo的形式将所学及所用的知识记录一下,便于日后回顾和使用。案例介绍本文将通过一个简单的小案例来搭建一个基于nodejs+koa的后端服务。主要涉及到的功能点有:token生成及校验token校验中间件不同模块路由拆分及组合用户登录及信息查询APIdb相关操作类封装常用工具类封装项目目录结构用到的知识点及第三方库jsonwebtoken: 用于生成及校原创 2021-12-24 11:26:28 · 2138 阅读 · 1 评论 -
【Vue3.0】Vue3.0组合式API的使用
前言小伙伴们大家好。为期近半个月的TypeScript分享到这里就结束了,当然了前面关于TypeScript的分享都是一些表面的基础知识,想要更深入的了解还需要多学多练多看源码,本猴就不再做过多分享了。从今天开始将为小伙伴们奉上关于Vue3.0相关知识的一些分享。vue3.0相较于vue2.0还是有很大的改变的,个人感觉vue3.0的用法更接近于react的了。至于一些语法指令啥的相较于2.0没有什么变化,这里就不再分享了。那么我们要学习的是3.0中的一些变化和新的技术点,下面我们先从vue3.0的使原创 2021-11-18 13:44:17 · 2119 阅读 · 1 评论 -
如何利用qiankun快速搭建一个微前端项目
前言小伙伴们大家好。前一篇文章跟大家分享了一些关于微前端的知识点,包括什么是微前端,为什么要用微前端以及如何实现一个微前端,在文章的最后我们还提到了能够实现微前端的两个库:single-spa和qiankun。今天我们就一qiankun+vue为例来实现一个简单的微前端。qiankun是什么qiankun是基于single-spa封装的一个库,旨在帮助大家能够更简单。更无痛的构建一个生产可用的微前端架构系统。qiankun的核心设计理念简单由于主应用微应用都能做到技术栈无关,qia原创 2021-11-03 11:02:40 · 2333 阅读 · 1 评论 -
2021是时候了解一下微前端了
前言小伙伴们大家好。今天将给大家分享一款微前端框架 - qiankun。那么在学习框架之前我们先来了解一下什么是微前端,它是怎么产生的,又是干什么用的,为什么要使用微前端?带着这些问题我们继续往下看!什么是微前端微前端是一种可以将多个独立发布的功能构建成一个完整的web应用的技术手段。说白了就是:将一个完整web应用按照不同的功能模块拆分成一个个不同的独立的子应用,然后再通过主应用来动态的加载这些子应用。核心就是先拆然后后再合。来看个例子:比如现有一个庞大的项目管理系统,该系统由项目模块,计划模原创 2021-11-02 10:21:13 · 1623 阅读 · 0 评论 -
[含泪吐血整理]Reflect对象中的13个静态函数
前言小伙伴们大家好。前一篇文章中我们学习了ES6中新增的Reflect对象,了解了该对象的一些特点以及设计目的,最后还对该对象上的一些静态方法做了一个简单介绍。接下来将对这些方法进行一个展开分享。Reflect.get(target, key, receiver)Reflect.get()方法查找并返回target对象中的key属性,如果没有该属性则返回undefined,该与target[key]读取属性类似,但它是通过一个函数执行来操作的。Reflect.get方法接收3个参数:ta原创 2021-10-26 17:34:49 · 1735 阅读 · 0 评论 -
ES6新增API - Reflect
前言小伙伴们大家好。前两篇文章中为大家分享了es6中新增的Proxy。今天将继续给大家分享ES6中新增的知识点 - Reflect。什么是Reflect呢,Reflect又是干什么的?下面为大家揭晓。ReflectES6为了能够更好的操作对象而新增了Reflect,它是JS中的一个全局的普通的对象,它的原型就是Object。Reflect翻译过来是反射的意思,那么为什么会取名为Reflect呢?是因为Reflect提供了一系列方法,开发者可以通过调用这些方法访问一些js底层的功能,由于它类似于其原创 2021-10-25 17:42:55 · 1884 阅读 · 0 评论 -
Proxy实例常用的拦截操作方法整理
前言小伙伴们大家好。前面一篇文章中我们对ES6中的Proxy进行了一个简单的分享。通过学习我们知道Proxy可以对对象进行拦截,从而可以根据业务需要做一些对应的逻辑处理。我们还知道Vue3.0对数据劫持做了一个很大的优化其中用到的就是Proxy。在文章的结尾我们还整理出了Proxy提供的支持拦截操作的一些实例方法。本章我们就抽取几个常用的拦截方法进行一个分享。get(target, propKey, receiver)看过上一篇文章的小伙伴应该都注意到了:在我们代码案例中用到最多的拦截方法就是g原创 2021-10-22 17:07:59 · 2587 阅读 · 0 评论 -
数据劫持的好帮手 -Proxy
前言小伙伴们大家好。在ES5中有个Object.defineProperty()函数可以用于对对象的属性进行劫持,或者给对象新增一个属性等操作。看过Vue2.0源码的小伙伴应该都知道,其中数据响应式原理就用到了Object.defineProperty这个方法对属性进行了劫持处理。但是我们今天的重点不是Object.defineProperty,而是ES6中为我们新提供的一个类 - Proxy。之所以先提到Object.defineProperty函数,是因为我们接下来要分享的Proxy提供的有些功能跟原创 2021-10-21 19:40:02 · 1686 阅读 · 0 评论 -
Symbol - 看似平凡的Symbol其实我们每天都在用 - 字符串操作
前言小伙伴们大家好。前面我们分享了一篇关于对象操作的几个Symbol的内置属性。比如实例检测的Symbol.hasInstance,对象类型转换的Symbol.toPrimitive和检测数据类型的Symbol.toStringTag。这几个都是跟对象操作相关的。接下来再分享几个跟字符串操作相关的Symbol内置属性:Symbol.match、Symbol.replace、Symbol.search和Symbol.split。Symbol.match相信大家对String.match()这个函数原创 2021-10-21 16:06:04 · 1750 阅读 · 0 评论 -
Symbol - 看似平凡的Symbol其实我们每天都在用 - 对象操作
前言小伙伴们大家好。今天继续分享Symbol相关的小知识。相信小伙伴们对instanceof,Object.prototype.toString,Number({}),String({})这些都不陌生吧,但小伙伴是否知道当我们使用这些东西时,其实多多少少都会跟Symbol有些许的关系。下面我们就来看一下到底有什么关系呢。其实在日常开发中,除了能够定义自己使用的Symbol值以外,ES6还为我们提供了一些内置的Symbol属性值,指向语言内部使用的一些方法。Symbol.hasInstance对原创 2021-10-20 16:59:19 · 1691 阅读 · 0 评论 -
Symbol - 听说用了这个方法就能创建出相同的Symbol值
前言小伙伴们大家好。上一篇文章我们分享了ES6中新增基本数据类型Symbol的用法及特点。通过上一篇的学习我们知道:用Symbol方法创建出来的Symbol值都是独一无二的,即使传递了一模一样的参数,那么如果有时候我就是想要创建一个相同的Symbol有没有办法呢,答案是肯定的。接下来将给大家分享一个能够创建相同Symbol值的方法。Symbol的方法Symbol.for()有时候我们就是希望传递相同的参数就能够创建出相同的Symbol值来使用。Symbol为我们提供了一个方法:Symbol原创 2021-10-20 15:08:58 · 1931 阅读 · 0 评论 -
听说ES6中新增了能够与众不同的Symbol数据类型
前言小伙伴们大家好。不知道大家有没有遇到这样一种情况:在我们日常开发中,有时候可能会用到一些别人提供的对象,并且业务需要想要在这个对象的基础上进行一些扩展,添加一些属性或方法等。这个时候如果我们不了解对象结构的情况下,冒然去扩展,很有可能就会跟对象原有的属性或方法发生冲突。因为在ES5中对象的属性名都是以字符串的形式命名的,这就很容易造成属性名的冲突。而我们接下来要分享的小知识便可以很好的解决这一问题。那就是ES6中新增的一种原始数据类型 - Symbol原始数据类型SymbolSymbol是E原创 2021-10-19 17:30:31 · 1613 阅读 · 0 评论 -
ES6数据结构之Set、WeakSet、Map、WeakMap大比拼
前言小伙伴们大家好。前面我们已经对Set、WeakSet、Map、WeakMap四种数据结构的特点及用法分别做了分享和介绍。为了让小伙伴们能够更直接的理解4种数据结构的异同,本篇文章将会对这四种数据结构的特点做一个统一的汇总和对比。特点SetSet本质是构造函数,可接收一个数组(或者具有 iterable 接口的其他数据结构)作为参数用来初始化SetSet中的值可以是任意类型的,但必须不能重复,所有值都是唯一的,因此可以用来进行数组去重使用Set中认为NaN和NaN是同一个值,因此Se原创 2021-10-19 14:24:58 · 1630 阅读 · 0 评论 -
ES6中的数据结构WeakMap
前言小伙伴们大家好。前面的我们已经学习了ES6中的3个关于数据结构的知识了,分别是Set、Map和WeakSet。今天要给大家分享的仍然是关于数据结构的WeakMap。从名字上看这个WeakMap并不陌生,因为既有我们前面学过的WeakSet中的Weak又有Map中的Map,所以想想WeakMap一定有跟WeakSet和Map相似的地方。下面就让我们具体来分析一下吧。WeakMapWeakMap的结构与Map的结构类似, 也是用于生成键值对的集合。WeakMap虽然与Map类似但是也有着自己的特原创 2021-10-19 11:11:00 · 2317 阅读 · 0 评论 -
ES6中数据结构Map与其它数据类型的互相转换
前言小伙伴们大家好。上篇文章中为大家详细分享了ES6中的Map数据结构,本篇文章将在上一篇文章的基础上对Map做一个补充。关于Map还有一个知识点没有分享到,就是关于Map和其它类型的互相转换。通过上篇文章的学习,我们了解到Map是ES6为我们提供的一个很强大的数据类型。那么在使用的过程中难免会遇到与其它类型打交道的操作。下面我们就来看下Map与其它几个类型互相转换的一些常用操作。Map与数组互相转换大家都知道数组在我们日常开发中是必不可少的一个数据类型了,就在我们上一篇文章分享Map使用的时原创 2021-10-18 20:11:53 · 2403 阅读 · 0 评论 -
ES6中的数据结构Map
前言小伙伴们大家好,前面我们已经学习了es6中的Set和WeakSet两种数据结构,今天将给大家分享es6为我们提供的另一种数据结构Map。大家都知道在JavaScript的对象(Object)中,只能用字符串类型作为对象的key,即使我们在写的时候用了其它类型的key,那么Object也会自动把它转换为字符串类型。但有时候由于业务需要,我们想用一些其它类型来作为对象的key,比如说dom对象,这个时候Object显然已经无法满足我们的需求了,因为dom对象最终会被转换为字符串类型[object HT原创 2021-10-18 18:13:44 · 1876 阅读 · 0 评论 -
ES6中的数据结构WeakSet
前言小伙伴们大家好。前面一篇文章中我们已经分享了一个ES6中的数据结构Set,掌握了Set的一些特点和方法,相信对我们日后开发一定会有很大的帮助。接下来我们再来看es6中与Set非常类似的另外一个数据结构WeakSet。WeakSetWeakSet 数据结构与Set类似,也是不重复的值的集合,同时也是一个构造函数。但有2点不同:WeakSet的值必须都是对象并且WeakSet是不可遍历的。WeakSet的特点及用法如下:WeakSet也是一个构造函数,可以用new来创建WeakSet数据结构原创 2021-10-18 15:02:30 · 1888 阅读 · 0 评论 -
ES6中的数据结构Set
前言小伙伴们大家好,今天开始要跟大家分享的是关于ES6系列的相关知识。前端的小伙伴都应该知道,自从es6发布后,为我们提供了很多新的的语法和方法,也使得我们在开发过程中更加高效更加便利。接下来就将给大家分享一下es6新语法中关于数据结构的Set和Map方法。SetSet是es6中提供的一种数据结构,它类似数组但与数组不同的是,它的值都是唯一的没有重复值。Set有如下特点和作用:Set本质也是一个构造函数,因此在使用时需要new,同时Set可以接收一个数组(或者具有 iterable 接口的其原创 2021-10-18 13:56:23 · 1806 阅读 · 0 评论 -
Vue2.0与Vue3.0中生命周期函数对比
前言做前端(尤其是Vue技术栈)的同学应该都知道,vue3.0已经来很长一段时间了,虽然现在市面上用vue3的人还不多,但是随着技术的不断发展,相信vue3取代vue2也是迟早的事。所以不管现在是否用得到,3.0的一些知识还是有必要学起来的。下面就从最基本的生命周期(钩子)函数开始对vue2.0和vue3.0进行一个简单的梳理和对比Vue2.0生命周期函数我们知道在2.0版本中主要有8个比较的生命周期函数,另外还有2个跟keep-alive组件相关的,下面我们就分别对每个函数做一下简单的介绍原创 2021-09-27 19:36:23 · 2276 阅读 · 0 评论 -
JavaScript高级 - 实现文件上传大文件切片上传断点续传前后端完整代码
js大文件切片上传断点续传完整代码在前面两篇文章JavaScript高级 - 纯js实现文件上传大文件切片上传断点续传(客户端)和JavaScript高级 - nodejs+koa2实现文件上传大文件切片上传断点续传(服务器端)中我们分别介绍了文件上传的服务端接口开发和客户端页面功能开发,接下来将为大家附上前后端完整代码服务端完整代码// server.jsconst Koa = require('koa');const Router = require('koa-router');co原创 2021-03-18 12:53:36 · 5769 阅读 · 1 评论 -
JavaScript高级 - 纯js实现文件上传大文件切片上传断点续传(客户端)
文章目录前言一、环境准备及依赖库二、项目结构三、 功能实现1、axios二次封装2、 单文件上传FROM-DATA,先选文件再上传3、 单文件上传BASE64,只能上传小于100K的png或jpg图片文件4、多文件上传FORM-DATA5、多文件拖拽上传FORM-DATA6、大文件切片上传,断点续传FORM-DATA总结前言在另一篇文章JavaScript高级 - nodejs+koa2实现文件上传大文件切片上传断点续传(服务器端)中已经介绍了文件上传的服务器端实现,并实现了几个不同上传形式的服务原创 2021-03-18 12:35:53 · 7478 阅读 · 2 评论 -
JavaScript高级 - nodejs+koa2实现文件上传大文件切片上传断点续传(服务器端)
const Koa = require('koa');const Router = require('koa-router');const koastatic = require('koa-static');const fs = require('fs');const bodyParser = require('koa-bodyparser');const multiparty = require('multiparty');const SparkMD5 = require('spark-md5原创 2021-03-10 00:08:43 · 6225 阅读 · 2 评论 -
JavaScript - 匿名函数具名化
匿名函数具名化所谓匿名函数具名化:其实就是给匿名函数起个名字。这是一个非常规范的操作。匿名函数具名化有如下几个特点匿名函数具名化后,这个名字可以在当前函数形成的私有上下文中使用,代表当前函数本身此名字不能在当前上下文以外的其它上下文中使用在本函数上下文中使用时,它的值是不允许修改的但是如果当前名字在被当前上下文中的其它变量声明过,则名字就变成了变量名,跟函数具名就没有任何关系了,所以变量的值是可以改的。(function b(){ if(i >= 3) return; con原创 2020-11-04 20:16:37 · 5923 阅读 · 1 评论 -
HTML+CSS flex弹性布局
flex布局原理flex是flexible box 的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。当我们为父盒子设置为flex布局后,子元素的float,clear,和vertical-align属性将失效 伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex布局采用flex布局的元素,称为flex容器(flex container),简称“容器”。它的所有子元素自动称为容器成员,称为flex项目(flex item),简称“项目原创 2020-10-19 22:28:27 · 5821 阅读 · 1 评论 -
一线大厂前端经典面试题JavaScript部分
BAT笔试题中几道关于堆栈内存和闭包作用域的问题let a = {}, b = '0', c = 0;a[b] = 'JavaScript';a[c] = 'HTML+CSS';console.log(a[b]); //HTML+CSS//原因:对象中属性名不能重复,一般都为字符串属性,字符串属性名跟数字属性名是一样的let a = {}, b = Symbol('1'), c = Symbol('1');a[b] = 'JavaScript';a[c] = 'HTML+CSS'原创 2020-10-10 11:07:04 · 6337 阅读 · 1 评论 -
一线大厂前端经典面试题HTML+CSS部分
大前端时代需要掌握的技术栈HTML5 https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/HTML5 语义化标签 音视频处理 canvas/webGL history API requestAnimationFrame 地理位置 web socket ... CSS3 常规 动画 盒子模型 响应式布局 ... JavaScript ECMAScript 3/4/5/6/7/8/9原创 2020-09-25 11:27:59 · 5905 阅读 · 0 评论 -
JavaScript 数据类型总结及相关面试题
JavaScript数据类型基本数据类型numberstringbooleannullundefinedsymbolbigint引用数据类型object普通对象数组对象正则对象日期对象Math数学函数对象…function数据类型检测typeof 检测数据类型的逻辑运算符instanceof 检测是否为类的实例constructor 检测构造函数Object.prototype.toString.call 检测数据类型typeof [原创 2020-09-22 17:21:43 · 6767 阅读 · 3 评论 -
HTML+CSS 元素的显示模式
什么是元素显示模式在了解元素显示模式前,我们先来举个不恰当的例子:比如在世界上的人有成万上亿,那么归根结底只有两种人就是男人和女人,偶尔还有可能有第三种人-人妖。无论是男人还是女人甚至人妖,虽然都是人但是不同的人也有着不同的特点或者说不同的分工。其实在HTML中也跟我们人类相似,html中同样也有多种多样的元素标签,但归根结底可以分为两大类:块元素和行内元素。而不同的元素又有着不同的特点和作用,了解了它们的特点我们就可以很好的对网页进行布局。谈到了网页的布局其实就涉及到了元素的显示模式。html原创 2020-09-21 20:14:37 · 5630 阅读 · 0 评论 -
HTML+CSS中的3D转换translate/rotate 旋转木马/翻转盒子/3D导航栏
前面我们已经介绍过了2D转换,那么我们即将学习的3D转换又是什么呢,它跟2D转换有什么不同呢?在我们日常生活的环境就是3D的,我们多看到的物体也都是3D的,而我们拍的照片就是3D物体在2D平面中呈现的样子 。3D的特点近大远小(离我们眼睛越近看上去越大,而离眼睛越远则看上去越小) 物体后面遮挡不可见根据这些特点我们就可以在网页上模拟构建出3D效果。三维坐标系我们前面讲过的2D是一个平面坐标系,而3D则是三维坐标系。三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的。x轴.原创 2020-09-21 15:02:57 · 10437 阅读 · 0 评论 -
JavaScript 闭包and变量作用域
变量作用域在讲闭包之前我们先来简单介绍一下JavaScript中的变量作用域。在ES6之前变量(用var关键字声明的变量)根据作用域的不同分为两种:全局变量和局部变量在ES6中还新增了块级作用于变量(用let声明的变量),用let声明的变量也分为全局变量和局部变量,只不过是用let声明的局部变量是块级作用域的,作用域的范围比更加精细了。比如我们在一对大括号{}里用let声明的变量则作用域范围仅限于当前的大括号内部。全局变量:一般情况下只要是在函数外声明变量都是全局变量局部变量:在函数内部原创 2020-09-11 11:10:24 · 5605 阅读 · 0 评论 -
JavaScript DOM事件流事件捕获事件冒泡
事件在讲事件流之前,我们先来了解一下事件。JavaScript与HTML之间的交互是通过事件来实现的。事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间。我们可以使用侦听器(或事件处理程序)来预订事件,以便事件发生时执行相应的代码。说白了,就是当我们对页面上的某些元素进行某些操作(比如鼠标单击)时产生一些特定的行为。比如鼠标单击一个按钮然后弹出一个对话框。这里就涉及到了按钮的click事件,产生的行为就是弹出了一个对话框。事件最早是在IE3和Netscape Navigator2 中出现的,当原创 2020-09-08 09:31:17 · 7699 阅读 · 4 评论 -
HTML+CSS动画波纹效果和奔跑的大熊
动画概念动画(animation)是CSS3中具有颠覆性的特征之一,可通过设置多个节点来控制一个或一组动画。常用来实现复杂的动画效果。相比过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。动画的使用定义动画:使用@keyframes定义动画语法:@keyframes 动画名称{ %0{ } 100%{ }}动画序列0%是动画的开始,100%是动画的完成,这样的规则就是动画序列 在@keyframes中规定某项css样式,就能原创 2020-09-07 23:59:34 · 6142 阅读 · 1 评论 -
HTML+CSS实现鼠标滑过tab页切换
实现效果:当鼠标滑过tab标签时,实现对应标签的内容切换<!DOCTYPE html><html> <head> <title>demo</title> <style> div{ psoition: relative; width: 1550px; height: 900px; padding: 0原创 2020-09-04 15:26:58 · 8017 阅读 · 2 评论 -
HTML+CSS中的2D转换之translate rotate scale
2D移动translate2D移动是2D转换中的一种功能,可以改变元素在页面中的位置,类似定位。语法{transform: translate(x, y); /*x,y分别表示x轴和y轴移动的距离*/}/*或者分开写*/{ transform: translateX(n); transform: translateY(n);}特点定义2D转换中的移动,沿着X和Y轴移动元素 translate最大优点:不会影响其他元素的位置 translate中的百分比单位原创 2020-09-03 00:20:01 · 5716 阅读 · 0 评论 -
HTML+CSS实现鼠标滑过分页按钮时放大效果
利用html+css实现当鼠标滑过分页按钮时,按钮自动放大的效果<!DOCTYPE html><html><head> <title>demo</title> <style> li { float: left; width: 30px; height: 30px; line-height: 30px原创 2020-09-03 00:00:06 · 6087 阅读 · 0 评论 -
JavaScript数据类型 - Array类型
创建数组一在JavaScript中,Array类型也是相当常用的一种类型。而且JavaScript中的数组与其他语言中的数组有着很大的区别。虽然js中的数组与其它语言中的数组都是有序列表,但与其它语言不同的是,js中的数组的每一项都可以保存任何类型的数据。也就是说数组的第一个值可以是字符串,第二个值可以是数值,第三个值可以是布尔值、对象等等。并且js数组可以动态调整大小。创建数组的基本方式有两种。第一种是使用Array构造函数,如下所示:var colors = new Array();如原创 2020-09-02 11:33:49 · 6814 阅读 · 0 评论 -
JavaScript数据类型 - Object类型
ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象,如下所示:var o = new Object();这个语法与Java中创建对象的语法相似,但在JavaScript中,如果不给构造函数传递参数,则可以省略后面的那一对圆括号。也就是说在像前面这个示例一样不传递参数的情况下,完全可以省略那对圆括号(但并不推荐这种做法)var o = new Objec原创 2020-09-01 10:20:25 · 6356 阅读 · 1 评论 -
JavaScript数据类型 - String类型
String类型String类型用于表示由0或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号"或单引号'表示,因此以下两种字符串写法都是正确的:var str1 = 'Alvin';var str2 = "Alvin";虽然在JavaScript中单引号和双引号都可以用来表示字符串,但是单引号或双引号必须成对出现,不能单双混用。比如:var name = "Alvin';var name1 = 'Alvin";上面这两种写法都是错误的。字符字面量.原创 2020-08-31 20:13:55 · 5412 阅读 · 0 评论 -
JavaScript数据类型 - Number类型
Number类型Number类型应该是ECMAScript中最令人关注的数据类型了,这种类型使用IEEE754格式来表示整数和浮点数值。为支持各种数值类型,ECMA262定义了不同的数值字面量表示格式。我们平时用的最多的也是最基本的数值字面量格式是十进制整数,十进制整数可以像下面这样直接写在代码中:var intNum = 68;//整数除了以十进制表示外,整数还可以通过八进制(以8为基数)或十六禁止(以16为基数)的字面值来表示。其中八进制字面值的第一位必须是0,然后是八进制数字序列(0原创 2020-08-31 15:41:33 · 5080 阅读 · 0 评论 -
JavaScript根据选择器字符串判断当前元素是否与选择器匹配
编写一个 match 函数。它接受两个参数,第一个参数是一个选择器字符串性质,第二个是一个 HTML 元素。这个元素你可以认为它一定会在一棵 DOM 树里面。通过选择器和 DOM 元素来判断,当前的元素是否能够匹配到我们的选择器。(不能使用任何内置的浏览器的函数,仅通过 DOM 的 parent 和 children 这些 API,来判断一个元素是否能够跟一个选择器相匹配。)以下是一个调用的例子。<div id="id1" class="class1"> <div id='id2原创 2020-08-29 17:50:23 · 5349 阅读 · 0 评论