自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

贪吃ღ大魔王

深耕于技术写博,致力于前端开发。

  • 博客(84)
  • 资源 (6)
  • 收藏
  • 关注

原创 前端———手撕十道JS面试手写!

解析 URL 参数为对象function parseParam(url) { const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 将 ? 后面的字符串取出来 const paramsArr = paramsStr.split('&'); // 将字符串以 & 分割后存到数组中 let paramsObj = {}; // 将 params 存到对象中 paramsArr.forEach(param =>

2021-07-19 09:15:29 1072 23

原创 每天嚼烂5道精选面试题,【中高级工程师】的进阶之路(day01)

1、封装一个方法,要求把给定的任意的 IP 字符串,转化成 32 位的二进制字符串。思路:用 split()将 ip 炸开,进行遍历将每个截断转为数字,再转为二进制字符串如果截断的长度不够八位,需要补够八位存入数组,转为字符串实现步骤:用 split()将 ip 炸开,用 list 接收 function toget(ip) { let list; list = ip.split('.') co

2021-07-12 12:54:03 737 24

原创 koa框架和mongodb数据库,一小时快速入门和直击实战【详细解读,建议收藏】

koa要求:nodejs的版本要高于7.6,因为 Node.js 7.6 版本 开始完全支持 async/await,所以才能完全支持我们的 Koanpm i koa -S使用const Koa = require('koa');const app = new Koa();// ctx是上下文,其中包含了request和responseapp.use(async ctx => { ctx.body = 'Hello World';});app.listen(3000);注

2021-07-12 08:04:16 964 8

原创 一篇博文:带你30分钟入门ajax入门,直击实战操作

http协议http协议全称超文本传输协议,大家只要把它理解成为一个服务器与客户端通信的协议即可。在http协议的约定下,客户端可以向服务器发送请求,服务器在接收到请求之后,给予客户端响应。http协议请求的常用方法get方法:获取数据post方法:提交数据put方法:修改数据delete方法:删除数据http请求本身并不会完成增删改查的基本操作,真正的操作仍然是由服务器完成。这些操作仅仅是一种约定,例如:我们用get请求配合服务器程序,可以获取数据,同样也可以添加、删除、修改数据

2021-07-10 16:29:01 490 13

原创 传统开发模式做项目:手把手教你,直击实战项目。

传统开发模式做项目使用模板引擎,在静态页面中书写js逻辑,所以项目中需要使用模板引擎步骤:将做的项目src放到project中在project中 进行项目初始化npm init -y下载依赖的模块:需要用到的npm i express art-template express-art-template cookie-parser body-parser bcryptjs mysql svg-captcha就在src所在文件夹中新建app.js用来创建服务器// 创建服务器

2021-07-06 09:48:46 491 20

原创 一小时:手把手教你入门express【建议收藏】

express简介Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。搭建web服务器Express 的本质:就是一个 npm 上的第三方包,提供了快速创建 Web 服务器的便捷方法。使用Express开发框架可以非常方便、快速的创建Web网站的服务器或API接口的服务器官方网址:https://www.expressjs.com.cn/简单使用下载安装:npm init -ynpm i express -S使用步骤:导入包创建服务器处理请求监

2021-07-05 09:00:16 3664 11

原创 nodejs:0到1的冲刺,毕业小白到公司大佬的逆袭之路,到底学了哪些?(二)

nodejs基础接上一篇:nodejs入门第三方模块就是网上别人已经开发好的模块,我们可以直接拿来借鉴使用,但是需要下载,下载工具使用npm。npm工具下载:npm install/i 包名npm i 包名 包名 ...npm i 包名@版本号 # 最新版本可以使用 @latest - 版本号不用写全npm i 全局工具 --gloabl # 简写 npm i 全局工具 -g下载命令执行之后,会生成node_modules文件夹,将下载好的包放在这个文件夹中。这个文件夹的特点:

2021-06-29 21:34:18 443 25

原创 nodejs:0到1的冲刺,毕业小白到公司大佬的逆袭之路,到底学了哪些?

nodejs基础概念Node.js 是一个开源与跨平台的JavaScript运行时环境。它是在浏览器外运行,它是一个事件驱动异步I/O单进程的服务端JS环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。注意:nodejs实现了js代码在浏览器外执行,所以在nodejs中无法运行DOM和BOM的代码nodejs中除了ECMAScript代码外,还内置了很多其他APInodejs让js在写前端代码的基础上,可以写后端代码,因为nodejs可以构建服务器

2021-06-28 08:56:36 957 62

原创 一篇博文:带你用Typescript实现飞机大战,附(详细思路注释),建议收藏!

站点结构:????图片素材:地图:经典原图飞机图片:由于图片太多,这里用的是精灵图。为了方便,精灵图的数据存在json中。json文件:arts.json:开发思路:创建地图发送请求将所有图片信息请求回来创建自己飞机发送子弹创建敌机处理击中和被击中环境配置:这里用的AMD 引入require.js源码附注释见末尾 ????创建地图: ????background.ts背景div盒子让背景图动起来,设置中间放两个图的div单例的实例对象,地图

2021-06-25 14:06:25 834 30

原创 前端知识合集【重中之重】,我只看这一篇!

一、数据类型的转换1.自动数据类型转换其他数据类型转换为字符串:var result = “你” + “好” //结果 你好 类型是stringvar result = “1” + 1; //结果 11 类型是stringvar result = “1” + true //结果 1true 类型是stringvar result = “1” + undefined ; //结果 1undefined 类型是stringvar result = “1” + null

2021-06-24 12:46:00 893 148

原创 手把手教学弟用js写的打砖块游戏,学弟乐哉~ 附(思路注释+源码)

打砖块游戏demo游戏试玩:????思路详解:????创建地图板块,上半部分是放置砖块盒子,砖块选择动态创建;底部放置小球和滑块;设置他们相应的样式根据brickBox大小,规定砖块大小,计算砖块数量,根据砖块数量动态创建滑块跟随鼠标进行移动滑块点击事件,小球移动。检测小球碰撞。源码附注释见末尾 ????布局创建: ????地图container放置砖块的板块brickBox小球ball,滑块slider实现效果:动态创建砖块: ????定义砖

2021-06-22 10:55:05 1874 258

原创 手把手教弟弟写了个扫雷demo,弟弟竟拿去跟大学同学装* 附(思路注释+源码)

js实现扫雷demo????一睹为快:???? 思路:????创建地图,随机生成100个div盒子,设置相应样式创建10个地雷,在地图中位置随机产生????判断一个div的周围有几个地雷,并将相应的数量给这个div,那么怎么找呢?往以下步骤看如果div在地图中间,周围有八个相邻的div,如果div在四个边界那么分别周围只有5个相邻的div,如果div是在地图四个角落,周围分别只有3个相邻的div例:在地图中间在地图边界在地图四个角落根据随机一个div在这

2021-06-19 08:18:32 12302 282

原创 canvas入门,一篇博文带你学会用代码绘画,直击实战案例!

canvas简单说明canvas是html5的一个标签,代表一个画布,可以在上面进行绘画、动画等操作。画布默认大小是300*150。canvas标签本省只是画布,要实现上面有文字、线条等呈现,需要使用js实现。总之,画布上一切的呈现,都需要使用js来实现。canvas标签本质上就是一张图片,只是一张空白图片。创建好的画布,要在上面进行绘画,需要使用js,用js操作canvas标签的 - canvas技术canvas标签,需要将画布调整大小的时候,加样式只是能改变视觉效果,真实的画布大小并没有改变

2021-06-17 11:57:04 1579 171

原创 一篇博文:带你TypeScript入门,两万字肝爆,建议收藏!

前言ts是什么?ts其实是TypeScript的一个简称,就跟JavaScript简称为js一样,官方给的解释是,ts它是js的超级,其实js的代码本质上都是ts编译的,例如写一个js代码 document.write() ,上面的提示就是ts,如图:系统里面写的是ts代码,所以ts是js的超级,是给js添加拓展功能的语言,这样的语言曾经还有一个叫as,但是这个语言已经没了,它其实就是flash语言。但我么开发需要完善js的话,必须得有这样的一个东西,所以微软拿着这个as的语法开发了ts这个语言,也就

2021-06-15 12:24:59 2713 223

原创 我用端午假期写了个贪吃蛇,学弟玩的不亦乐乎!附(思路注释+源码)

学弟玩法:(蚯蚓找妈)我的玩法:(王母摇头)模块化开发为什么要用面向对象写,有三大特性:封装、继承、多态。为什么要封装 : 实现模块化开发,封装为一个块一个块的,利于维护,有某个模块出现bug只用修改这个模块,其他模块不受影响。在工作中,开发速度快,同时开发模块。分三个模块写:地图,食物,蛇。蛇模块分为:定义蛇、蛇移动、蛇死亡、蛇吃食物、蛇移动方向、蛇显示。地图模块:创建地图板块,设置样式function Map() { // 创建一个div thi

2021-06-12 15:22:30 5263 243

原创 10分钟,手把手教学【正确】还原京东倒计时,初学者必看,简单易懂!

前言    由于今天在c站意外看到了一篇写京东倒计时的案例,觉得代码写的有问题。于是就在百度和c站搜了一下,发现基本上写的京东倒计时都是有问题的,根本没有完全还原京东的倒计时,逻辑是有问题的,感觉有点误人子弟了,这对刚入门的小白非常的不友好。于是我决定写一下这个案例,还原一下真正的京东倒计时案例。我直接把过程给写一下,希望对初学者理解有帮助。源码可以在末尾获取。⭐作为一个前端切图仔,我先去把京东倒计时的背景图片给扒下来把。倒计时源背景图:然

2021-06-11 01:13:19 2228 174

原创 1小时入门,手把手教你学会用webpack打包,隔壁王大爷看了都说小伙子细!

webpack新建站点:⭐这里的文件路径最好是英文注意:站点文件名不可以起名叫webpack为什么呢?我们在 https://www.npmjs.com/ 中搜索 webpack模块是可以搜到的在nodejs中我们通常是下载别人的模块再引用,当别人已经使用webpack上传,我们是不可以再用这个名字的。下面,我们在站点文件内,右键git bash here先进行初始化 ⭐cnpm init -y初始化成功:初始化成功,站点自动生成package.json 文件下..

2021-06-09 07:46:41 1024 243

原创 1小时,带你前端【上传文件】方法汇总,一篇就够了~

文章目录上传文件传统开发模式上传前后端分离上传ajax上传FileReader读取文件jquery上传webWorker离线缓存上传文件项目中会有很多文件上传的需求,例如:头像上传、表格文件、word文档等…上传必备表单元素:<input type="file">进行文件上传的时候,⭐⭐1.表单必须是post请求2.表单必须声明不要对数据进行编码 - enctype=multipart/form-data传送数据的格式就是键值对的形式,且数据都是js的数据类型,但文件进行传.

2021-06-08 08:14:43 3669 78

原创 想进大厂,没听说过设计模式?10次面试,9次面试官问!没看是您的损失~

## 1 设计模式### 概念设计模式是为了解决某种问题,而设计的一套最佳解决方案。面向对象 - 更加注重对象 - 找一种最佳的定义对象并个对象添加属性和方法 的 方案找到的最佳的解决方案 - 就是一种设计模式针对不同的问题,我们会有不同的最佳解决方案 - 设计模式常见的设计模式:- 单例模式- 组合模式- 观察者模式- 命令模式- 代理模式- 工厂模式- 策略模式- 适配器模式- 。。。<hr>### 1.1 单例模式数据库连接 - 多个功能都需要操作数据库

2021-06-06 11:41:32 1298 227

原创 一篇博文:带你 gulp入门 0基础必看,万字肝爆,建议收藏~

文章目录gulp引入:概念:安装:gulp提供的接口:注册任务同步任务异步任务读取文件输出到文件管道监视文件变化gulp插件案例全自动化构建项目扩展压缩图片gulp 打包组件gulp引入:项目做好以后,在上线之前还有一些工作需要去做:压缩css压缩js压缩图片编译sass合并文件。。。等等,在前端工作流出现之前,这些工作都由人力完成,而这些工作往往比写业务本身更加费时,效率非常之低且还容易出错,于是自动化的处理工具也就必然出现了。前端的构建工具常见的有Grunt、Gulp、We.

2021-06-03 23:40:00 1583 90

原创 1小时0基础带你Git入门,保姆式教学,万字肝爆! 建议收藏~

文章目录Gitgit和github简介专业术语本地使用git两个特殊文件远程操作不初始化选择初始化远程仓库分支冲突同步/拉取历史版本回滚的冲突分支远程操作github服务器分支分支命名规范SSH提交配置秘钥Git在实际工作中,我们会遇到很多无法预料的问题:问题一:频繁改需求。例:开发功能A - V1添加功能B - V2在功能B上添加功能C - 重新写功能B,再添加功能C - V3在功能B上添加功能D - 重新写功能B,再天添加功能D项目开发好以后,形成版本v1.0需求改变:在v1.0.

2021-06-02 23:27:25 1002 177

原创 听叔一句劝,这里面水太深,历数模块化开发,你把握的住吗?

闲言碎语一、投石问路1.1 模块化开发起始1.2 起始开发方式1.3 IIFE伪模块化规范1.4 AMD模块化规范二、醍醐灌顶2.1 CMD模块化规范三、九九归一3.1 Commonjs3.2 es6的模块化

2021-06-01 07:56:01 761 140

原创 一篇博文带你 jQuery入门,万字肝爆! 建议收藏~

jQuery介绍jQuery伪数组和DOM元素????选择器⭐⭐⭐筛选器⭐⭐⭐表单元素选择器 -- 了解表单对象选择器 - 重点⭐⭐⭐筛选器方法 -- 重点⭐⭐⭐事件⭐属性操作⭐样式操作⭐⭐类名操作元素内容操作⭐元素节点操作创建元素:添加元素⭐替换元素删除元素复制元素元素尺寸元素位置动画⭐基本动画自定义动画JQ高级????jquery发送ajax请求⭐⭐⭐get请求post请求⭐⭐ajax请求⭐⭐jsonp请求⭐⭐全局ajax函数⭐jquery的

2021-05-29 07:53:22 6758 202

原创 一篇博文带你0基础 Html和css入门

前端初学入门,找不到学习方向,不喜欢记笔记?没关系,这篇博文为你整理了详细的学习笔记汇总,欢迎收藏,喜欢的可以直接到博文尾处,免费下载md笔记哦~⭐⭐⭐# Html5网站:1、网站的建立流程????注册域名租用空间网站建设确定网站的主题搜索资料规划网站制作页面4.网站的推广5.网站的维护2、网页的组成及web标准????结构:网页的结构部分 xhtml或html表现:网页的样式css行为:网页要实现的功能JSHTML 超文本标记语言XHTML 可扩

2021-05-28 00:06:19 980 53

原创 1小时0基础带你 Javascript入门 建议收藏~

javaScript1、背景介绍为了提高网速而由网景公司的布兰登·艾奇来解决,他用10个工作日设计了js1、js标准ECMAScript是一个标准,而JavaScript是语言2、js的基础概念1、什么是js一个支持面向对象的、跨平台的、脚本语言,依赖与html才能实现。2、应用场景:表单验证:规范用户输入数据,和后台数据进行交互 2. 网页特效:给页面内容加行为,让页面动起来 3. 游戏开发:飞机大战、打砖块js的组成示意图物联网:https://zhuanlan.zhihu.c

2021-05-27 07:46:02 883 65

原创 一个小时,零基础入门,看完这篇30行代码 教你实现百度换肤!

百度换肤效果零基础入门,只要有兴趣,20分钟教你学会百度换肤效果。没错,只需要20行代码就能搞。废话少说,直接上效果:先了解一下html节点对象DOM的树形结构(节点树)html中的所有标签,文本,空格都可以叫做节点对象。我们可以通过DOM的选择器 来操作节点:获取节点对象1.通过标签id 获取节点var obj = document.getElementById("id名称")描 述:获取网页指定id名字的元素,返回一个对象语 法:var obj = document..

2021-05-26 00:45:53 1293 67

原创 10分钟入门~面试官问我这个问题,我自信的站了起来!一笑生花

文章目录前言认识函数函数在内存中执行原理执行空间不销毁的函数闭包闭包xmind图形成条件闭包的语法糖函数柯里化闭包面试题继承继承xmind图概念继承方案原型继承### 借用函数继承组合继承拷贝继承寄生继承寄生组合继承(完美继承)ES6的继承前言如果你是一个入门初学者,对前端的重要知识掌握的不够扎实或间接遗忘,亦或你是现在正在寻找工作,背烂了面试题,却被面试官处处难为到,这篇博文一定对你有很大的帮助,这篇博文主要详细结合案例讲述前端的难点:闭包和继承。 是许多前端大佬拿来反复咀嚼的知识,也是面试官们必问

2021-05-25 18:58:32 362 17

原创 一个小时,带你玩转前端交互,零基础入门做登录界面

文章目录一、封装ajax二、回调地狱的终极解决方案ASYNC/AWAIT三、总结一、封装ajax封装最严谨的ajax,可直接复制引用ajax.jsfunction sendAjax(obj){ / 先判断url是否传入 if(!obj.url){ / 没有传 throw new Error('地址必填') / 抛出自定义错误 } / 传入了之后需要验证url是否是字符串 if(Object.prototype.toStrin.

2021-05-24 21:33:57 1449 30

原创 教你怎么用ajax来进行交互(入门必看)!!!

文章目录同步和异步ajax的概念什么是ajaxajax出现的历史ajax的使用XMLHttpRequest对象GET请求的创建**请求的创建与发送**GET的使用ajax状态服务器响应值接收get和post的区别POST方式请求步骤实现请求同步和异步请求ajax的异步ajax的同步验证同步与异步服务返回数据格式处理类型Text类型处理json数据的处理回调函数的嵌套概念常见的典型异步回调promise使用特点使用基本使用promise改造ajax依赖调用扩展:Promise.all()Promise.rac

2021-05-23 22:48:15 1379 24

原创 php和mysql入门

文章目录服务器[了解]服务器软件HTTP服务器(web服务器)服务器与客户端的关系搭建HTTP服务器phpStudy介绍phpStudy的安装phpStudy的错误解决提示缺少vc9 库文件本地hostsPHP基础**PHP简介**PHP文件位置php初体验变量数据类型数组输出语句语句判断语句循环语句函数json的处理Mysql数据库技术数据库的组织架构:关系型数据库—MySQLSQL-操作数据库的语言数据库操作方式数据库表的操作数据库的增删改查查看数据库选择数据库创建数据库删除数据库数据表的操作表创建以及

2021-05-22 23:27:48 2139 19

原创 Bootstrap入门使用

文章目录一、Bootstrap概念?bootstrap** 介绍什么是bootstrap为什么使用bootstrap下载Bootstrap搭建bootstrap开发环境文件中引入文件移动设备的设置二、bootstrap栅格布局布局容器响应式的实现三、bootstrap栅格布局button按钮样式表单之文本域#### 全局css之表格,使用了悬停变色组件之字体图标js插件之模态框(javascript特效)一、Bootstrap概念?bootstrap** 介绍Bootstrap是Twitter的设计

2021-05-20 21:46:49 657 12

原创 ajax的同源策略和JOSNP跨域

文章目录一、ajax的同源策略二、phpstudy中域名的配置三、jsonp跨域一、ajax的同源策略同源策略的基本概念1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。同源策略:最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。协议相同域名相同端口相同举例来说,这个网址http://www.example.com/dir/page.html协议是http,域名是www.exampl

2021-05-19 20:10:27 231 2

原创 面向对象ajax函数的封装

面向对象ajax函数的封装1 提取参数,进行穿递2 找到get和post异同点一样的地方公用 不一样的区别处理 class axios { static get(url, data, cb) { axios.http('get', url, data, cb); } static post(url, data, cb) { axios.http('post

2021-05-18 21:47:38 179 3

原创 数据库连接时Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法连接

问题场景:今天新创建了一个数据库,连接以后发现原来做的一个项目的数据库完全连接不上,且好像被覆盖,不知道是不是,还是权限问题。在新的数据库下创建表可以正常使用:当连接第一个数据库是,是直接连接不上:错误;ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)Access denied(拒绝访问);第二:using password:NO/YESusing password 的是是否

2021-05-17 22:03:32 8188

原创 getelementbyid 和 queryselector 获取的区别

getelementbyid 和 queryselector 获取的区别querySelector()是用于接收一个CSS选择符,返回与该模式匹配的第一个元素;querySelectorAll()用于选择匹配到的所有元素简单的说,query选择符选出来的元素及元素数组是静态的,而getElement这种方法选出的元素是动态的。什么叫静态的?意思是指选出的所有元素的数组,不会随着文档操作而改变。举例: <ul> <li>111</li>

2021-05-16 21:57:33 446 2

转载 原型对象原型链--js面向对象

原型对象原型链--js面向对象前言原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好。不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么。简单粗暴点看原型链吧,想点与代码无关的事,比如人、妖以及人妖。1)人是人他妈生的,妖是妖他妈生的。人和妖都是对象实例,而人他妈和妖他妈就是原型。原型也是对象,叫原型对象。2)人他妈和人他爸啪啪啪能生出一堆人宝宝、妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗称造人。3)人

2021-05-15 15:34:59 154

原创 淘宝式轮播图切换太快BUG

项目场景:淘宝式轮播图问题描述:手动切换太快,或者设置定时间时间太短,切换都会出现的跳转BUG,BUG源码:JS: class swiper { constructor() { this.ullis = this.$('ul li', true); this.ul = this.$('ul'); this.ol = this.$('ol');

2021-05-14 19:07:56 515 1

原创 div随机烟花效果Debug

项目场景:div随机烟花效果问题描述:调用删除div方法 remove(),this指向问题bug源码如下: js:<script> class fire { constructor() { // 获取父节点 设置调用点击事件 this.con = document.getElementById('container'); this.con.on

2021-05-13 19:30:35 190 4

原创 js动画透明度Debug

项目场景:js动画透明度问题描述:鼠标移动box区opacity向1渐变正常,鼠标移出box区发生闪烁现象。当鼠标移入时,正常:当鼠标移出时,闪烁bug:以下是bug源码:js: var box = document.querySelector('div'); var timer; var timers; var num = 0.3; var num1 = 1; b

2021-05-12 13:10:14 143 4

原创 全选反选框bug

项目场景:全选框反选问题描述:在测试过程中发现,依次将每个li选中后,全选框自动选中,但是在对全选框进行取消选中时,需要多点一下取消。可能是因为个人代码问题,具体代码例如下:js: var price = document.getElementById('j_cbAll'); var ipts = document.querySelectorAll('#j_tb input'); var but = document.querySelector('#btn')

2021-05-11 19:39:41 194 1

谷歌插件大全,自己经常使用的供分享使用

谷歌插件大全,自己经常使用的供分享使用

2021-06-12

Html5+CSS.md

Html5+CSS 汇总笔记

2021-05-27

完美版无缝轮播图源码包.zip

完美版 无bug轮播图源码

2021-05-27

面试宝典 v2-新增Vue和React.pdf

前端面试合集新增Vue和React.

2021-05-26

Snipaste_v2.4.0(32、64位).zip

截图、固定屏幕、取色

2021-05-24

写轮眼轮回眼css实现

写轮眼轮回眼css实现 代码源 供参考

2021-04-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除