前端知识点思维导图
2025-09-03 19:29:40 0 举报
AI智能生成
前端开发知识体系是一张多元且复杂的思维导图,它包含核心技术栈、开发实践和优化策略。核心内容涵盖HTML、CSS和JavaScript这三个基本构成模块,它们是构建用户界面的基础。此外,还包括流行的前端框架和库,如React、Angular和Vue,以及用于构建用户界面的UI组件库。前端工具链是开发流程中不可或缺的部分,涉及构建工具Webpack、包管理器npm、版本控制Git等。性能优化也是一大重点,这包括代码分割、懒加载和缓存策略等。安全性是另一关键方面,涉及跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的防御措施。现代前端开发还注重视觉和交云反馈,因此,Web设计原则、响应式设计和前端性能监测工具也是必修课程。无论是文件类型还是修饰语,都突出了前端技术的多样性和深度,且不断随着新技术和标准的出现而更新。
作者其他创作
大纲/内容
vue2<br>
虚拟DOM<br>
原因:真实DOM是浏览器渲染的核心,会触发浏览器的重绘和回流<br>
解析HTML<br>
生成DOM树<br>
解析CSS<br>
生成CSSOM树<br>
生成渲染树<br>
生成rander树<br>
回流<br>
根据渲染树进行计算位置,对元素进行布局
定义:<br>当元素的位置,大小,盒模型等发生修改,会触发浏览器的回流,重新计算布局<br>
场景:<br>样式修改(影响布局)、DOM操作、浏览器环境变化<br>
重绘
将节点的样式绘制到页面上<br>
定义:<br>当元素样式发生修改,但是不影响元素布局的情况下,只需要绘制该元素的样式<br>
场景:<br>只要不涉及:位置,尺寸,盒模型<br>
合成
将页面的各个图层合并到页面上<br>
原理
用js对象模拟真实DOM的结构和属性;内存中的操作远快于真实DOM的操作,Vue可以在内存中通过虚拟DOM计算出‘最小变更’,再一次性更新到真实DOM中<br>
步骤
1、在rander阶段,生成虚拟的DOM树(VNode树)<br>
2、当数据发生变化的时候,Vue重新执行rander,生成新的VNode树,然后通过Diff算法对比新旧的VNode树,找出两者“最小差异”<br>
VNode:<br>{<br> tag:'div', // string<br> data:{ // VNodeData<br> class:'',<br> on:{}<br> },<br> children:[] // VNode[]<br> text:'' // 文本<br> elm: undefined, // 挂载的真实DOM<br> key: 1 // string/number<br>}<br>
同层对比
只对比VNode树同一层级下的元素<br>
key复用<br>
列表节点有唯一Key值,Diff根据Key值匹配<br>
3、更新真实DOM<br>
如果tag/key不匹配,销毁节点,创建新节点并插入DOM<br>
如果节点匹配,但是属性/内容变化,仅跟新节点的样式、内容、事件,不销毁节点<br>
如果是列表节点,根据key调整顺序,复用<br>
根实例
const app = new Vue({<br> el: '#app',<br> template: '<App/>',<br> components: { App }<br>})
Vue应用的起点,通过new Vue创建,挂在到#app上<br>
组件
原理:跟根实例类似,形成树状结构,并非直接挂载到根实例上<br>
单文件组件<br>
通过imports引入<br>
全局组件
注:必须在new Vue之前注册<br>
使用vue.coponent({})注册<br>
组件传参
父传子
父:属性绑定传递<br>
子:用props接收<br>
子传父
this.$emit('事件名', params)<br>
配置
name<br>
components
data
类型:function<br>
作用:<br>定义组件的响应式数据,返回一个对象,确保每个组件实例数据保持独立<br>
props<br>
类型:Object<br>
作用:<br>接收父组件传递的数据<br>
methods
类型:<br>{[key:string]: Function}<br>
作用:<br>定义组件方法,可以通过this访问组件实例<br>
特点:<br>
无缓存<br>
手动触发<br>
可执行任何操作<br>
computed
类型:<br>{[key:string]: Function} | {get(){},set(){}}<br>
作用:<br>定义计算属性,<font color="#e74f4c"><b>依赖自动缓存(区别于methods)</b></font><br>
响应式
读取:触发get()<br>
修改:触发set()<br>
特点<br>
缓存
computed属性具有缓存
脏数据标记:watcher含有属性 dirty<br>dirty属性为true的时候,读取computed会重新计算<br>dirty属性为false的时候,读取computed会使用缓存
响应式触发<br>
有返回值<br>
场景:需要处理复杂的逻辑判断<br>
watch
类型:{[key:string]: Function}<br>
作用:<br>监听数据变化并且进行回调<br>
特点<br>
可以监听data、props、computed的数据<br>
响应式触发<br>
无返回值<br>
配置
immediate<br>
在created阶段后会触发一次<br>
deep
默认对象的属性发生变化的时候,不会触发watch,除非使用deep:true<br>
生命周期
周期顺序
父beforeCreate => 父created => 父beforeMount => <br>子beforeCreate => 子created => 子beforeMount => <br>子mounted => 父mounted<br>
父beforeDestroy => 子beforeDestroy => 子destroyed => 父destroy<br>
生命周期钩子
beforeCreate<br>
组件实例刚创建,实例属性(data、methods、computed等)均没初始化<br>
几乎不用<br>
created<br>
组件实例创建完成,实例属性初始化完成,但是DOM还没有生成<br>
用于数据初始化,发送请求<br>
beforeMount<br>
模板编译完成,但是没有挂载到页面<br>
用于修改数据,且修改数据不会触发更新<br>
mounted<br>
组件已经挂在到页面,DOM已经生成<br>
用于操作DOM,给DOM添加监听事件<br>
beforUpdate<br>
数据变化后,DOM更新前<br>
可以获取DOM跟新前的状态,比如input框的值<br>
updated
数据变化导致DOM更新后<br>
可以获取跟新后的DOM<br>
beforeDestroy<br>
准备销毁前,数据任可以访问<br>
用于清理计时器、事件绑定、取消未完成的请求<br>
destroyed<br>
组件消除
keep-alive<br>
使用方式:使用<keep-alive>标签包裹子组件<br>
被包裹的组件不会被销毁,而是进入缓存状态<br>
生命钩子
activeated<br>
当被缓存的组件被激活时
deactivated
当组件被缓存时触发<br>
响应式原理
object.defineProperty()进行数据劫持<br>
多层级对象会通过observer()进行递归劫持<br>
通过发布-订阅进行视图页面更新<br>
根本缺陷<br>
无法监听对象的新增属性或删除属性<br>
需要使用this.$set(this.newData, key, value)<br>
nextTicket<br>
原因:Vue对DOM的跟新是异步的,数据被修改后,不会立即更新DOM,而是将更新缓存起来,在下一次事件循环中更新,这样节省性能,避免频繁更新DOM<br>
问题:导致更新数据后,立马访问DOM可能获取到的是旧的DOM状态<br>
使用方式:<br>this.$nextTick(() => {<br> doSomething() // 确保执行函数时DOM已经更新完了<br> });<br>
使用场景:需要在修改数据后,立马操作基于新数据渲染后的DOM的情况下<br>
router<br>
使用方式:<br>在new router的时候,将routes放进去<br>
按需加载路由<br>
在引入route的时候,component使用()=>import()<br>
模式
history
兼容性差<br>
SEO友好<br>
参数可见在url后
基于H5的History API(pushState/replaceState)<br>
hash<br>
域名后携带 '#'<br>
基于浏览器hashchange<br>
VueX
使用方法<br>
在new Vue的时候作为state引入<br>
在组件内使用this.$state<br>
核心配置
state
存储全局状态
const sotre = new Vuex.Store({<br>state:{},<br>mutation:{},<br>action:{},<br>getters:{}<br>})<br>
mutation
修改状态的唯一方法
store.commit('funName')<br>
action
用于处理异步<br>
store.dispatch('actionName')
支持返回promise<br>
getters<br>
相当于组件内的computed
module<br>
将store拆分为大小模块<br>
vue3
与Vue2相比<br>
响应式原理
Vue2的Object.defineProperty无法监听对象属性新增/删除,而且对于对象是递归监听嵌套对象<br>
Vue3基于proxy,能代理整个对象,天然支持数组/对象的属性新增/删除,而且无需递归处理嵌套函数,性能更优<br>
API风格<br>
Vue2主要是使用options选项式写法<br>
Vue3主要使用Composition组合式写法<br>
setup
ref
reactive<br>
虚拟DOM<br>
Vue2局限<br>
Diff是全量整个VNode对比,没有做到靶向diff<br>
Vue2VNode结构冗余<br>全量属性结构,无论是否需要都包含在VNode内<br>
Vue3改进
1、字段裁剪,标签实际使用了属性时才有该字段<br>
2、通过标记法进行Diff对比,没有标记的标签直接跳过diff<br>
3、进行靶向diff,不再全量diff
跳过空节点和注释<br>
proxy<br>
new Proxy({<br> get(target, prop){},<br> set(target, prop, value){},<br> deleteProperty(target, prop){},<br>})<br>
参数<br>
get
拦截对象的读取
set<br>
拦截对象/数组的修改<br>
deleteProperty<br>
拦截delete操作<br>
apply<br>
拦截函数调用
组合式API<br>
setup<br>
在beforeCreate前执行,初始化Vue实例和数据<br>
核心作用<br>
声明响应式数据<br>
ref
reactive
定义方法,compute、watch
导入其他函数<br>
ref
用于包装基本类型<br>
访问/修改需要使用.value(模板不需要)<br>
也可以包装对象/数组
reactive<br>
用于包装对象/数组
不能直接赋值,会丢失响应式<br>
解决方案:使用ref替代reactive<br>
包装基础类型会丢失响应式<br>
computed
const doubleCount = computed(() => {<br> console.log('计算执行了'); // 依赖变化时才会重新执行<br> return count.value * 2;<br>});
返回的是ref对象<br>
watch
watch(count, (newVal, oldVal) => {<br> console.log(`变化:${oldVal} → ${newVal}`);<br>}, { deep: true });
watchEffect<br>
watchEffect(() => {<br> console.log(`count 变化:${count.value}`); // 自动追踪 count<br>});
无需指定数据源,无法获得改变前的值<br>
组件通信<br>
父传子Props<br>
const props = defineProps({<br> msg: String,<br> count: {<br> type: Number,<br> default: 0<br> }<br>});
使用defineProps<br>
父组件通过组件属性传递给子组件,子组件通过defineProps接收<br>
子传父<br>
const emit = defineEmits(['increment', 'updateMsg']);<br><br>const handleClick = () => {<br> emit('increment', 1); // 传递增量<br> emit('updateMsg', '来自子组件的消息');<br>};
使用defineEmits<br>
在父组件通过定义函数,将函数绑定到组件属性上,在子组件内通过defineEmits传递<br>
生命周期<br>
同Vue2<br>
pinia<br>
export const useCounterStore = defineStore('counter', {<br> state: () => ({ count: 0 }),<br> getters: { double: (state) => state.count * 2 },<br> actions: { increment() { this.count++ } }<br>});
移除了mutation,可以在action中修改数据<br>
支持ts<br>
通信<br>
在一个 store 的 actions 中直接导入并使用其他 store
模块化方式
区别于Vue2的Vuex.modules,pinia可以定义多个单独的store实现模块化<br>
解构保持响应式<br>
使用storeToRefs实现保持store响应式<br>
小程序
与H5区别<br>
运行环境<br>
小程序运行在微信原生引擎上,H5运行在浏览器<br>
性能<br>
小程序更接近原生app,性能会比H5好<br>
功能
可以调用微信的原生API,H5受浏览器限制<br>
发布流程<br>
小程序受微信审核<br>
结构<br>
app.js // 应用入口<br>
app.json // 全局配置<br>
app.less<br>
project<br>
语法<br>
wxml<br>
view:类似于div标签<br>
scroll-view:可滚动的容器<br>
swiper
轮播图容器<br>
swiper-item<br>
text<br>
文本标签类似于span<br>
selectable
image<br>
video<br>
audio<br>
button<br>
input<br>
textarea<br>
switch:相当于checkbox<br>
radio-group/radio<br>
checkbox-group/checkbox:复选框<br>
css<br>
默认组件隔离,通过@import url('./st.less')引用<br>
不支持通配符*,hover需要通过hover-class使用<br>
子主题<br>
事件绑定<br>
bindtap<br>
绑定事件,支持事件冒泡<br>
catchtap<br>
绑定事件,阻止事件冒泡<br>
bind:func<br>
父子组件通信<br>
数据传递<br>
url传递<br>
页面A在url中添加字段<br>
页面B在onLoad生命钩子中获取<br>
StorageSync
微信提供setStorageSync和getStorageSync<br>
所有页面均可访问<br>
使用globalData存储全局变量<br>
关闭小程序后重置
步骤<br>
在app.js中声明全局变量globalData<br>
在其他页面通过getApp().globalData使用<br>
组件通信<br>
父传子<br>
子组件声明properties<br>
父组件在组件标签属性传参<br>
子传父<br>
子组件通过triggerEvent触发父组件绑定的方法<br>
父组件通过绑定的方法触发事件,接收值的变化<br>
配置文件<br>
app.json
pages(url[]):声明组件所有page路径,第一个为首页<br>
subPackages:分包<br>
window:设置所有页面的默认样式<br>
tabBar:配置底部标签栏<br>
preloadRule:分包预下载<br>
page.json<br>
同app.json的window<br>
enablePullDownRefresh:仅在当前页面下拉刷新<br>
component.json<br>
component(boolean):当前是否为自定义组件<br>
externalClasses(str[]):外部样式类,允许父组件传入的样式类<br>
usingComponents({string:url}[]):引用其他自定义组件<br>
styleIsolation
isolation(默认):组件内样式不受外界干扰<br>
apply-share:组件样式隔离,父组件样式影响子组件<br>
share:组件和父组件的样式互相影响<br>
生命周期<br>
App<br>
App({<br> onLaunch(options) {<br> console.log('小程序初始化完成', options);<br> },<br> onShow(options) {<br> console.log('小程序显示', options.scene); // scene 表示启动场景(如扫码进入)<br> },<br> onHide() {<br> console.log('小程序隐藏');<br> },<br> onError(err) {<br> console.error('发生错误', err);<br> }<br>});
onLaunch<br>
小程序初始化的时候,全局只触发一次<br>
onShow<br>
小程序启动/从后台切换到前台<br>
onHide<br>
小程序从前天切换到后台<br>
onError<br>
小程序脚本错误<br>
onPageNotFound<br>
Page<br>
Page({<br> onLoad(options) {<br> console.log('页面加载,参数:', options); // 接收 URL 中的参数<br> },<br> onShow() {<br> console.log('页面显示');<br> },<br> onReady() {<br> console.log('页面渲染完成');<br> },<br> onHide() {<br> console.log('页面隐藏');<br> },<br> onUnload() {<br> console.log('页面卸载');<br> },<br> onPullDownRefresh() {<br> console.log('下拉刷新');<br> // 刷新完成后停止刷新动画<br> wx.stopPullDownRefresh();<br> }<br>});<br>
onLoad
页面加载时,只触发一次<br>
onShow
页面显示时<br>
onReady<br>
页面初次渲染完成时触发,只触发一次<br>
onHide<br>
页面隐藏时触发<br>
onUnLoad<br>
页面卸载时
onPullDownRefresh
页面下拉刷新时
Component
Component({<br> lifetimes: {<br> created() {<br> console.log('组件创建(未挂载)');<br> this.internalData = '非响应式数据'; // 可初始化非响应式数据<br> },<br> attached() {<br> console.log('组件挂载到页面');<br> this.setData({ count: 0 }); // 可调用 setData<br> },<br> detached() {<br> console.log('组件从页面移除');<br> clearInterval(this.timer); // 清理定时器<br> }<br> },<br>});
created<br>
组件实例刚被创建时<br>
此时还不能使用setData<br>
attached<br>
组件实例进入页面时
ready<br>
页面布局完成时触发
moved<br>
组件实例被移动到另一个节点上触发<br>
detached
组件实例被移除<br>
性能优化<br>
分包主包<br>
主包
小程序启动的时候必须加载的资源,包含(入口页面,全局状态管理)要求<2MB<br>
分包<br>
根据业务划分,仅当用户访问到对应功能才加载<br>
控制主包体积,小程序初始化,仅下载解析主包,快速呈现<br>
分包预下载<br>
减少onLaunch的同步操作<br>
合并多余的setData(),每一次setData都会触发页面重新渲染<br>
图片增加lazy-load,只加载可视区域的图片<br>
合并请求<br>
使用CDN加速<br>
使用节流,防抖
按需引入组件
webpack
定义:一个静态模块打包工具,将所有的资源视为模块,分析依赖关系,打包成浏览器能识别的静态资源<br>
webpack作用<br>
.vue文件: 通过webpack+vue-loader拆分转换为Html + css + js(ES5)<br>
ts文件:通过webpack + ts-loader转换为Es5的js<br>
图片:通过webpack + url-loader转换为base64<br>
配置
Entry<br>
入口文件:webpack从这里开始解析依赖<br>
Output
输出配置:指定打包后输出的路径和名称<br>
Loader<br>
模块转换器:处理非js文件资源<br>
ts-loader处理ts文件<br>
css-loader处理css文件<br>
less-loader<br>
babel-loader转译Es5<br>
url-loader<br>
专注于转换文件内容,将非JS文件转换为JS文件<br>
在模块解析阶段<br>
Plugin<br>
插件:扩展webpack功能,原生功能不够用<br>
HtmlWebpackPlugin生成Html<br>
CleanWebpackPlugin清理输出目录<br>
注重于打包优化,通过钩子函数介入webpack生命周期<br>
Mode
模式(development/production)
打包流程<br>
初始化<br>
读取配置文件,创建Compiler实例<br>
编译
从entry出发,递归解析所有依赖模块<br>
对所有模块调用对应的loader解析<br>
输出<br>
输出到output指定的目录<br>
性能优化<br>
打包速度
使用cache:true,缓存已编译的模块;babel-loader使用cacheDirector缓存转译结果<br>
打包体积
import动态导入组局,实现组件懒加载
资源压缩:使用css-minimizer-webpack-plugin<br>
图片压缩,url-loader将图片转base64,image-webpack-loader压缩图片<br>
vite
对比webpack
vite
基于ESM,无需打包,按需编译<br>
热更新:需要重新构建相关模块,大型项目比较慢<br>
基于Rollup打包,性能更优<br>
webpack<br>
webpack基于打包器,需要全量打包后再启动服务
热更新:基于模块依赖图只跟新变化的模块<br>
基于自身打包器<br>
区别<br>
避免全量打包,基于ESM按需加载,按需编译<br>
预构建优化,将第三方依赖预构建为ESM模块缓存,避免重复构建依赖<br>
一个前端构建工具<br>
配置<br>
root<br>
项目根目录<br>
base<br>
部署基础路径<br>
service<br>
开发服务器配置<br>
build<br>
生产构建配置<br>
plugin
插件
AI<br>
AI插件codeBuddy<br>
解释代码作用,生成注释<br>
自然语言生成代码<br>
代码审查和优化,针对一些方法<br>
DtoC<br>
使用QPilot-Figma2Code<br>
figma一键转代码
浏览器<br>
http协议<br>
TCP/IP<br>
性能优化
资源预加载、懒加载
dns-prefetch、preload资源<br>
合并多余请求,减少请求次数
使用http请求缓存
使用离线包、本地缓存<br>
使用CDN部署<br>
精灵图/雪碧图<br>
合并多次wx.setData<br>
requestIdelCallback<br>
删除多余遗留防水墙
使用骨架屏,减少用户感知
减少DOM的操作,尽量一次性修改样式<br>
高频事件使用防抖节流<br>
按需引入/按需导入<br>
tree-sharking删除死代码
前端安全<br>
HTML
<!DOCTYPE html><br>
<b><font color="#4669ea">释</font></b>:用于对浏览器声明文档类型<br>
<b><font color="#e74f4c">缺失后果</font></b>:浏览器会进入怪异模式<br>
怪异模式<br>
布局错乱
兼容性差
html特性失效<br>
<a></a><br>
<b><font color="#e855a4">行内元素</font></b>:不可设置高宽,宽度有内容决定<br>
属性
href
<b>hreflang</b>:表示href指向的是其他语言的网址<br>
<b>target</b><br>
_self(默认)<br>
_blank:新窗口打开<br>
_top:在最顶层窗口打开,同_self<br>
_parent:在上层窗口打开,同_self<br>
<abbr></abbr><br>
<font color="#4669ea"><b>释</b></font>:用于文本缩写<br>
属性
title:全文本<br>
audio<br>
属性
autoplay<br>
controls
loop
muted
src
video<br>
属性
autoplay<br>
controls
height<br>
loop
muted
src
poster
<strong>/<em>/<b><br>
区别:strong是表文本强调,加粗只是强调的其中一种方式、b是指加粗文本,二者在SEO的权重不一致<br>
<base><br>
<b><font color="#4669ea">释</font></b>:用于规定页面下所有链接的默认url和默认target<br>
属性
href<br>
target
<body><br>
<b>释</b><font color="#000000">:文档主体</font><br>
<br><br>
<b><font color="#4669ea">释</font></b>:换行<br>
<button></button><br>
属性/值
autofocus
disabled
form
<b><font color="#4669ea">释</font></b>:按钮属于一个或多个表单<br>
<font color="#ed9745"><b>值</b></font>:<form>标签的id值<br>
type<br>
<b><font color="#4669ea">释</font></b>:写在form表单标签内时,可以使用type属性功能<br>
值
submit
reset
button
<footer><br>
<b><font color="#4669ea">作用</font></b>:用于表示页脚,利于SEO理解页面结构和内容<br>
<header><br>
<b><font color="#4669ea">作用</font></b>:用于表示页头,利于SEO理解页面结构和内容<br>
<img><br>
属性/值
loading<br>
<b><font color="#4669ea">释</font></b>:指定浏览器是应立即加载图像还是延迟加载图像,性能优化点<br>
值:eager/lazy<br>
alt
规定图像的替代文本,SEO和无障碍化都需要<br>
height<br>
width<br>
src
相比href,src会阻塞页面渲染
<input><br>
<b><font color="#e855a4">行内元素</font></b>:不可设置高宽<br>
属性/值
type<br>
button:按钮<br>
checkbox:复选框<br>
checked
color:拾色器<br>
date:年月日<br>
datetime-local:年月日时分秒<br>
file:上传文件<br>
multiple:附加属性<br>
image:定义图像作为提交按钮<br>
附加属性:src\height\width\alt<br>
month:年月控件<br>
number:数字控件<br>
password:密码控件<br>
radio:单选<br>
checked
value
size
input框的长度
placeholder
name:元素名称<br>
min
max
maxlength:最大字符数<br>
form
disabled
<label><br>
for<br>
form
<link><br>
href
hreflang
<main><br>
<noscript>
浏览器不支持javascript的时候显示
<option><br>
disabled
label
selected
value
<p>
<script><br>
script
会阻塞html解析
async
适用于独立脚本,异步下载,不阻塞html执行。下载完立即执行,可能会打断html执行<br>
滥用后果:找不到依赖的变量,导致报错<br>
滥用后果:操作DOM的时候找不到元素<br>
滥用后果:全局变量/覆盖冲突<br>
defer
异步下载,html解析完成后,再执行脚本<br>
src
会堵塞渲染性能,将src的资源请求回来,并且替代掉该标签
type
<span><br>
<b><font color="#e855a4">行内元素</font></b>:不可设置高宽<br>
CSS
选择器权重
!important<br>
行内样式
ID选择器<br>
类/伪类/属性选择器<br>
伪类
:hover 鼠标悬停<br>
:active 被点击时<br>
:focus 鼠标注焦<br>
:visited 链接被访问后<br>
标签/伪元素选择器
伪元素
::before/::after<br>
在元素的前/后添加一个子元素,使用content写入内容<br>
::first-letter<br>
选中块元素的第一个字母
::first-line<br>
选中块元素的第一行
::selection<br>
鼠标选中的文本<br>
placeholder
input框或者textarea的placeholder的样式
全局选择器
样式list
背景background
background-image
background-image和<img><b>区别:</b>前者属于装饰性样式,后者归属页面内容,后者有对SEO友好<br>
linear-gradient
background-color
background-repeat<br>
背景是否重复
background-position<br>
背景位置
值:right top<br>
文本text<br>
text-align<br>
<b><font color="#4669ea">释</font></b>:文本对齐方式,因为文本在盒子内默认是居左对齐<br>
right<br>
center
justify<br>
text-decoration
<b><font color="#4669ea">释</font></b>:用于删除一些标签的自带装饰<br>
none <br>
取消装饰
overline<br>
顶画线
line-through
中画线
underline
下划线
text-transform
<b><font color="#4669ea">释</font></b>:可以转换英文文本的大小写<br>
uppercase<br>
lowercase<br>
capitalize<br>
text-indent<br>
<b><font color="#4669ea">释</font></b>:文本缩进,设置第一行的文本缩进,用于段落<br>
text-overflow<br>
<b><font color="#4669ea">释</font></b>:超出容器的文本<br>
ellipsis<br>
超出部分使用省略号
white-space
空白处理,可设置不可换行
line-height
<b><font color="#4669ea">释</font></b>:控制文本的垂直距离<br>
word-wrap
break-word
<b><font color="#4669ea">释</font></b>:允许换行<br>
字体font<br>
font-family<br>
<b><font color="#4669ea">释</font></b>:字体系列<br>
font-style<br>
<b><font color="#4669ea">释</font></b>:字体样式(是否倾斜)<br>
font-size<br>
px
em
<b><font color="#4669ea">释</font></b>:1em等于文字的大小默认16px<br>
font-weight<br>
vertical-align<br>
<b><font color="#4669ea">释</font></b>:控制非块级元素,垂直方向对齐<br>
盒模型box-sizing<br>
content-sizing:默认值-标准盒模型只算content<br>
box-sizing:IE盒模型<br>
边框border<br>
清除浮动:border内元素浮动,导致边框塌陷<br>
添加无意义标签:clear:both<br>
border元素添加overflow:hidden,<br>触发BFC(块级格式化上下文)<br>
使用伪元素清除
border-style<br>
释:盒子是否虚实线<br>
border-color<br>
border-width<br>
border-radius<br>
轮廓outline
不占位置
outline-color<br>
outline-style<br>
outline-width<br>
margin<br>
padding
显示<br>
display
不会出现在渲染树上
visibility<br>
保留布局空间
opacity
保留布局空间
定位position<br>
static
默认值,相当于无定位<br>
fixed<br>
释:固定在窗口位置不变<br>
relative<br>
相对原来位置变化
absolute
绝对定位
sticky
粘性定位<br>
释:在页面上,滚动超出一定距离后变为fixed定位<br>
用法:需要配合设置top值使用<br>
overflow<br>
visible
hidden
scroll<br>
浮动float
清除浮动clear:both<br>
转换transform
2D转换<br>
<b><font color="#4669ea">释</font></b>:控制元素2D变换<br>
translate(50px,100px)<br>
XY轴移动<br>
rotate(30deg)<br>
顺时针30度<br>
scale(0.5)<br>
缩小放大一半<br>
3D转换<br>
rotateX(30deg)<br>
rotateY(30deg)<br>
rotateZ(30deg)<br>
过度transition
<b><font color="#4669ea">释</font></b>:元素变化的时候附加时间属性<br>
transition
过度动画的汇总
transition-property<br>
过度动画的属性
transition-duration<br>
过度动画的时长<br>
动画animation<br>
@keyframes<br>
用于声明一个动画
animation:myfirst 10s<br>
轮廓outline
释:给盒子增加一层轮廓,且不占用空间,且在margin外<br>
outline-offset<br>
释:可以设定轮廓距离盒子<br>
布局
网格布局gird
flex布局
flex-direction<br>
row:默认横向排<br>
column:改后纵向排<br>
flex-wrap<br>
nowrap<br>
wrap<br>
justify-content<br>
flex-start:默认左对齐/上对齐<br>
flex-end:右对齐/下对齐<br>
center:居中对齐<br>
space-between:两端对齐,两端无空格<br>
space-around:平均空格对齐<br>
align-items<br>
flex-start<br>
flex-end<br>
center
baseline<br>
align-content<br>
同justify-content<br>
align-self<br>
可以给元素设置单独的对齐方式
JS
声明方式
var<br>
1、函数级作用域,整个函数内可访问(直接穿透if、for等代码块)、<br>如果函数外声明,则变成全局变量<br>2、存在变量提升,但是赋值不会<br>3、可以重复声明
let
块级作用域,无法穿透代码块
const
1、块级作用域,无法穿透代码块<br>2、不允许修改指向地址(只可以修改引用数据类型的属性值)<br>
数据类型
种类
基本数据类型
boolean<br>
string
赋值方式
直接赋值
使用关键字new<br>
会影响性能,以及一些未知的bug
内置属性
constructor<br>
length<br>
prototype<br>
内置方法
charAt(i):返回字符串第i个字符<br>
charCodeAt(i):返回字符串第i个字符的Unicode码<br>
concat():连接两个或以上个字符串<br>
endswith(str):判断字符串是否由str结尾<br>
startwith(str):判断字符串是否由str开头<br>
fromCharCode(num):将unicode码转换成str<br>
indexOf(s):s在字符串中首次出现的位置<br>
lastIndexOf(str):搜索字符串中最后出现str的index值<br>
search(reg):同indexOf,但是可以支持传入reg进行正则<br>
includes(str):字符串是否包含str<br>
match(reg):匹配字符串中的正则<br>
repeat(num):将字符串重复num遍<br>
return replace(str1,str2):在字符串中匹配str1,并替换成str2,然后返回新值<br>
return replaceAll(str1,str2):在字符串中匹配所有str1,并且全部替换成str2,然后返回新值<br>
return slice(index1,index2):从第index1开始,截取到index2(不包含),并且返回<br>
return split(str):将字符串以str分割成数组返回<br>
return substr(index,num):从index开始提取num个字符,并返回<br>
return substring(index1,index2):从index1截取到index2,并返回<br>
return toLowerCase():将字符串转为小写,并返回<br>
return toUpperCase():将字符串转为大写,并返回<br>
trim():去除字符串两边空格<br>
toString():将字符串对象(new String())转换为字符串<br>
number
对象属性
MAX_VALUE
由于对数字的存储方式导致
MIN_VALUE
NAN<br>
对象方法
isInteger():是否为整数<br>
isNaN():是否为有效数字<br>
toFixed(num):保留num位小数<br>
toString():将数字转化为字符串<br>
valueOf():转为为纯数字<br>
null
undefined
symbol
引用数据类型
Array
内置方法
循环遍历方法
every((e)=>e>6):检测数组内所有都符合某个条件,返回boolean <br>
some((e)=>e>6):检测数组内是否有符合某个条件的元素,返回boolean<br>
filter(e=>e>6):返回数组内所有符合条件的元素<br>
find(e=>e>6):找到首个符合条件的元素并返回<br>
findeIndex(e=>e>6):同上,返回index值<br>
forEach():每个元素执行回调函数<br>
return Array.from(arr,(e)=>e*6):对数组做处理并且返回新的数组<br>
includes(str):返回str是否在数组内<br>
indexOf(str):返回数组中str的位置<br>
return map((e)=>e*6):返回处理后的新数组<br>
reduce((total,val)=> total+val):将前一个元素和后一个元素做处理,最后生成一个值<br>
return concat():连接多个数组,并且返回新数组<br>
fill(param,index1,index2):将param从index1填充到index2<br>
isArray():判断是否数组<br>
join(str):将数组拼接到一个字符串内<br>
keys():返回数组的key值<br>
pop():删除最后一个元素,并返回删除掉的元素<br>
push(param):将param添加到数组最后<br>
shift():删除并返回首个元素<br>
unshift(param):将param添加到数组的首位<br>
reverse():将数组顺序倒转<br>
slice(index1,index2):截取数组中第index1到第index2(不包含)个元素并且返回新数组<br>
splice(index,num,params):在index1的位置删除num个,并且返回删除的元素,然后在index的位置插入params<br>
sort():对数组进行排序<br>
toString():将数组转化为字符串输出<br>
flat(num):数组扁平化<br>
return with(index,param):将数组第index个元素更新为param,并返回新数组<br>
Object
Function<br>
Date
判断方式
typeof<br>
局限性:只能判断基本类型,引用类型均返回object<br>
instanceof
局限性:只能用于判断引用数据类型<br>
Object.prototype.toString.call()<br>
最完美的方式,但是麻烦,需要用slice获取具体类型
Array.isArray()<br>
BOM<br>
对象属性<br>
closed:返回窗口是否被关闭<br>
frames<br>
<iframes title="" src="http://baidu.com"></iframes><br>
视口尺寸(用户看到的页面尺寸)<br>
innerHeight
innerWidth<br>
浏览器尺寸(包含工具栏、滚动条)<br>
outerHeight<br>
outerWidth<br>
浏览器存储
localStorage
sessionStorage<br>
name
length
包含<iframe>标签<br>
navigator<br>
<b><font color="#4669ea">释</font></b>:包含浏览器的信息<br>
对象属性
userAgent<br>
language<br>
screen<br>
客户端屏幕的信息
history<br>
特性:只读<br>
方法
back():加载history的前一个url<br>
forward():加载history的下一个url<br>
go(url):加载指定的url<br>
location<br>
host:主机名和端口<br>
hostname:主机名<br>
pathname:路径<br>
href:完整的url<br>
protocol:协议<br>
对象方法
alert():弹出一段警告<br>
confirm():浏览器自带确定框<br>
prompt(msg,defaultText):浏览器自带的input框<br>
btoa(str):将字符串base64加码<br>
atob(encodeStr):将base64加码后的字符串解码<br>
focus():键盘获得焦点<br>
blur():键盘失去焦点
setTimeout<br>
setInterval<br>
clearTimeout<br>
clearInterval<br>
close():关闭浏览器窗口<br>
open(url,'_blank'):打开一个新窗口<br>
print():唤起打印机打印当前页面<br>
stop():停止页面载入<br>
DOM<br>
对象属性<br>
对象方法
JS事件<br>
onchange<br>
onclick<br>
onmouseover<br>
onmouseout<br>
onkeydown
onload<br>
原型链
constructor<br>
浏览器存储
cookies
属于DOM,document.cookies<br>
随会话清除
每次请求会自动发送到服务器<br>
大小小于4kb
localStorage<br>
手动去除或者清除浏览器缓存
大小约5M<br>
sessionStorage<br>
关闭浏览器则清除
getItem(key):获取key的值<br>
setItem(key,value):设置key和value<br>
removeItem(key):删除key<br>
clear():清除所有存储<br>
window.name<br>
可以当sessionStorage使用,同窗口共享支持跨域<br>
可以储存大小2-5M<br>
闭包
闭包是指函数拥有自己的私有变量,并且保护该变量不会被外界随意修改<br>
vuex和pinia<br>
类
构造函数
constructor
关键字<br>
extends<br>
static<br>
static声明的变量方法只能在类内部使用,new出来的实例无法使用static的变量
super<br>
调用父类构造函数
new一个函数的过程
1:创建一个空对象<br>
2绑定原型:将空对象的原型,指向构造函数的prototype,使得实例能继承构造函数原型上的方法<br>
3this指向:把构造函数的this指向这个空对象<br>
4执行构造函数:为该空对象添加变量和属性<br>
5返回对象:<br>
TS<br>
特性
在编译时发现类型错误<br>
提升代码可读性<br>
类型提示<br>
定义类型<br>
interface<br>
支持extends继承<br>
支持合并声明
type<br>
支持计算属性<br>
不支持合并<br>
enum<br>
适合枚举
支持合并声明
可以支持反向枚举
泛型
T<br>
function reverseArray<T>(arr: T[]): T[] {<br> return arr.slice().reverse();<br>}
不指定
any<br>
关闭检查<br>
unknown<br>
未知类型,不能直接调用原型链上的方法<br>
类型断言<br>
使用as断言类型(abc as string).atob()<br>
never
不存在的类型,用于无需返回的函数<br>
0 条评论
下一页