前端冲刺必备指南

Yuki-^_^ 2024-07-01 17:03:02 阅读 77

前言

每天努力一点点💪,就能升职加薪💰当上总经理出任 CEO 迎娶白富美走上人生巅峰🗻,想想还有点小激动呢😎。

希望能够把每一处知识点,说明白,(当然,如果哪一处不了解,可以在评论区进行探讨哦!)⏰,计时开始!

如果您发现本文有帮助,请您点赞,收藏,评论,留下您学习的脚印👣,我很乐意谈论😃

话不多说,开始学习!!!

我会不断修改这篇文章内容,一起来探讨吧!😁

学习 css 布局🤣

display 属性,它是 css 中最重要的用于控制布局的属性,每个元素都有一个默认的 display 值,这与元素的类型有关,大多数元素的默认值一般是 block 或 inline。

每个元素都有一个默认的 display

block 元素叫做块级元素;inline 元素叫做行内元素

常用的 display 值,有时候为 none,它是用来再不删除元素的情况下隐藏或显示,display:none。

display 设置成 none 元素不会占据它本来应该显示的空间;使用 visibility:hidden 会占据空间,只是隐藏了,元素还在。

position 属性:static 是默认值,口诀,子绝父相。fixed,一个固定定位元素会相对于视窗来定位,即使页面滚动,它也会停留再相同的位置上。

css 属性中的 float,float 可实现文字环绕图片效果:

img { float: right; margin: 0 0 1em 1em;}

复制代码

clear 属性可以用于被控制的浮动元素,如果一个盒子添加了 float: left 浮动,可以使用 clear: left 清楚元素的向左浮动。

清楚浮动,clearfix hack,可以使用新的 css 样式:

.clearfix { overflow: auto;}

复制代码

百分比宽度,百分比是一种相对于包含块的计量单位。

.clearfix { float: right; width: 50%;}

nav { float: left; width: 15%;}

section { margin-left: 15%;}

复制代码

响应式设计是一种让网站针对不同的浏览器和设备“呈现”不同显示效果的策略,可以让网站在不同情况下呈现很好的效果。

inline-block 为行内块标签

.box { float: left; width: 200px; height: 100px; margin: 1em;}.after-box { clear: left;}

// 相同效果.box1 { display: inline-block; width: 200px; height: 100px; margin: 1em;}

复制代码

flexbox 是 css3 种的一种新的布局模式,用于满足现代 web 的复杂需求。

<div class="flex-container"> <div class="flex-item">flex item 1</div> <div class="flex-item">flex item 2</div></div>

.flex-container { display: -webkit-flex; display: flex; width: 300px; height: 240px; background-color: Silver;}

.flex-item { background-color: DeepSkyBlue; width: 100px; height: 100px; margin: 5px;}

复制代码

JavaScript 变量😊

1,Int 整型

2,Float 浮点

3,Boolean 布尔

4,String 字符串

5,Array 数组

6,Object 对象

7,Function 函数

8,Regular Expression 正则

驼峰命名法😀

全部小写,单词与单词间用下划线分割

大小写混合,大驼峰,每个单词首字母大写,小驼峰,第一个单词首字母小写,其他首字母大写。

规则😁

首字符,英文字母或者下划线;组成,英文字母,数字,下划线;(禁用,JavaScript 关键词与保留字)

声明😃

显示声明,使用 var 变量名,({没有类型,重复声明,隐式声明,不声明直接复制}),({先声明,后读写,先赋值,后运算})。

变量类型😃

值类型,占用空间固定,保存在栈中,保存与复制的是值本身,使用 typeof 检测数据的类型,基本类型数据是值类型。

引用类型,占用空间 不固定,保存在堆中,保存与复制的是指向对象的一个指针,使用 instanceof 检测数据的类型,使用 new()方法构造出的对象是引用型。

作用域😄

全局变量,包括,在函数体外定义的变量,在函数体内部定义的无 var 的变量;调用,在任何位置。

局部变量,包括,在函数内部使用 var 声明的变量,函数的参数变量;调用,当前函数体内部。

优先级,局部变量高于同名全局变量,参数变量高于同名全局变量,局部变量高于同名参数变量。

特性:忽略块级作用域,全局变量是全局对象的属性,局部变量是调用对象的属性。

作用域链,内层函数可访问外层函数局部变量,外层函数不能访问内层函数局部变量。

声明周期:全局变量,除了被删除,否则一直在,局部变量,声明起到函数运行完毕或显示删除。回收机制,标记清楚,引用计数。

逻辑运算符😅

!逻辑非

返回 true

空字符串0nullNaNundefined

复制代码

返回 false

对象非空字符串非0数值(Infinity)

复制代码

注意:逻辑非,连续使用两次,可以将任意类型转为布尔型值

&&逻辑与😆

当第一个操作数是对象,返回第二个操作数

当第二个操作数是对象,第一个操作数值为 true 时返回该对象

两个操作数都是对象,返回第二个操作数

一个操作数为 null 时,返回 null

一个操作数为 NaN 时,返回 NaN

一个操作数为 undefined,返回 undefined

注意:当第一个操作数的值时 false,则不对第二个操作数进行求值。

逻辑或 ||😉

第一个操作数是对象,返回第一个操作数

第一个操作数值为 false,返回第二个操作数

两个操作数都是对象,返回第一个操作数

两个操作数都是 null,返回 null

两个操作数都是 NaN,返回 NaN

两个操作数都是 undefined,返回 undefined

注意:如果第一个操作数值为 true,就不会对第二个操作数求值。

JavaScript 数组

添加

push()在数组末尾添加数组

unshift()在数组头部添加元素

concat()合并两个数组

删除

pop()删除并返回数值的最后一个元素

shift()删除并返回数组的第一个元素

队列方法(先进先出);栈方法(后进先出)。

splice()和 slice()

splice()

删除任意数量的项:1,要删除的起始下标,2,要删除的项数

在指定位置插入指定的项:1,起始下标,2,0(不删除任何项),3,要插入的项。

替换任意数量的项:1,起始下标,2,要删除的项数,3,要插入的项

splice()方法,注解,该方法会改变原始数组。用于添加或删除数组中的元素。

arrayObject.splice(index,howmany,item1,.....,itemX)

var arr = ['a', 'b', 'c']

arr.splice(2,1) // 删除一个,返回删除元素的数组

['c']

arr.splice(2,0) // 删除0个,返回空数组

[]

var array = [1,2,3,4,5];array.splice(3,2);console.log(array);// 结果: [1,2,3]

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];var removed = myFish.splice(2);// 从第 2 位开始删除所有元素// 运算后的 myFish: ["angel", "clown"]// 被删除的元素: ["mandarin", "sturgeon"]

复制代码

所有主要浏览器都支持 splice()

Array 数组的 splice()方法,它的作用删除,插入,替换

插入的用法

语法:array.splice(starti,0,值1,值2...);

// 表示要在哪个位置插入,0表示删除0个元素,因为插入和替换都是由删除功能拓展的,值1,值2,需要插入的值

var array = [1,2,3,4,5];array.splice(2,0,11,22);

// 结果:[1,2,11,22,3,4,5]

复制代码

替换的用法

语法:array.splice(starti,n,值1,值2);

var array = [1,2,3,4,5];array.splice(2,2,11,22);

// 结果:[1,2,11,22,5]

复制代码

slice()功能,从已有数组中选取部分元素构成新数组

返回项的起始位置

返回项的结束位置

特性,如果是负数,则用数组长度加上该值确定位置,启示位置实为数组的实际下标,结束位置的实际下标为结束数值减 1。

Array.prototype.slice()

slice()方法返回一个新的数组对象。原始数组不会被改变。这一对象是一个由 begin 和 end 决定的原数组的浅拷贝。

const animals = ['1', '2', '3', '4', '5'];

console.log(animals.slice(2));// expected output: Array ["3", "4", "5"]

console.log(animals.slice(2, 4));// expected output: Array ["3", "4"]

console.log(animals.slice(1, 5));// expected output: Array ["2", "3", "4", "5"]

复制代码

slice(start,end),从 start 开始截取到 end 单不包含 end,返回值为截取出来的元素的集合(只是返回一个浅复制了原数组中的元素的要给新数组)

var fruits = ['a', 'b', 'c', 'd', 'e'];var citrus = fruits.slice(1, 3);

// fruits contains ['a', 'b', 'c', 'd', 'e']// citrus contains ['b','c']

复制代码

slice 方法用一个类数组对象/集合转换成一个新数组。

function list() { return Array.prototype.slice.call(arguments);}

var list1 = list(1, 2, 3); // [1, 2, 3]

复制代码

在 JavaScript 中,几乎所有东西都是一个对象,除了 string,number 和 booleans 这样不可变的原始值。

Array.prototype.slice

function myFunc() { // 错误, arguments是一个类数组对象, 不是一个真实的数组 arguments.sort(); // 借用 Array 原型中的方法 slice // 它接受一个类数组对象 (key:value) // 并返回一个真实的数组 var args = Array.prototype.slice.call(arguments); // args 现在是一个真正的数组, 所以可以使用Array的sort()方法 args.sort();}

复制代码

数组排序,reverse()颠倒数组中元素的顺序,sort()对字符数组或数字数组进行排序。

function compare(value1, value2) { if(value1 < value2) { return -1; }else if(value1 > value2) { return 1; }else{ return 0; }}

复制代码

数组转换

toString()转换为字符串并返回

toLocaleString()转换为本地格式字符串并返回

join()用指定分割符分割数组并转换为字符串

toString()函数用于将当前对象已字符串的形式返回。该方法属于 Object 对象。

迭代方法:参数

every 如果该函数对每一项都返回 true,则返回 true

filter 返回值为 true 的所有数组成员

forEach 无返回值

map 返回每次函数调用的结果数组

some 有任意一项返回 true,则返回 true

接收参数:

要在每一项上运行的函数

运行该函数的作用域对象

传入参数:

数组项的值 item

该项在数组中的位置 index

数组对象本身 array

缩小方法:

reduce 从数组起始位开始遍历

reduceRight 从数组末尾开始遍历

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

注意: reduce() 对于空数组是不会执行回调函数的

var numbers = [1, 2, 3, 4];numbers.reduce(回调函数);

复制代码

const array1 = [1, 2, 3, 4];const reducer = (accumulator, currentValue) => accumulator + currentValue;

// 1 + 2 + 3 + 4console.log(array1.reduce(reducer));// 10

// 5 + 1 + 2 + 3 + 4console.log(array1.reduce(reducer, 5));// 15

var arr = [1,2,3,4];// 求和var sum = arr.reduce((x,y)=>x+y)var sum1 = arr.reduce((x,y)=>x*y)

复制代码

求数组项的最大值

var max = arr.reduce(function (prev, cur) { return Math.max(prev,cur);});

复制代码

取两值最大值后继续进入下一轮回调。

数组去重

arr.reduce(function(prev,cur,index,arr){ ...}, init);

arr 表示原数组;prev 表示上一次调用回调时的返回值,或者初始值 init;cur 表示当前正在处理的数组元素;index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;init 表示初始值。

arr.reduce(callback,[initialValue])initialValue (作为第一次调用 callback 的第一个参数。)

复制代码

如果这个数组为空,运用 reduce 是什么情况?

var arr = [];var sum = arr.reduce(function(prev, cur, index, arr) { console.log(prev, cur, index); return prev + cur;})//报错,"TypeError: Reduce of empty array with no initial value"

var arr = [];var sum = arr.reduce(function(prev, cur, index, arr) { console.log(prev, cur, index); return prev + cur;},0)console.log(arr, sum); // [] 0

复制代码

js 中 in,一般用来遍历对象, 也可以用来遍历数组

in 作用,判断属性是否存在于对象中,在 true,不在 false。

in 作用,判断数组,索引号就是属性。

对于数组循环出来的是数组元素;对于对象循环出来的是对象属性;当‘对象’是数组时:“变量”指的是数组的“索引”;当‘对象’为对象是,“变量”指的是对象的“属性”。

计算数组中每个元素出现的次数

// 求总成绩var scoreReport = [ { name: 'dada', score: 100 }, { name: '魔王哪吒', score: 99 }]

// forvar sum = 0for(var i = 0; i<scoreReport.length; i++) { sum += scoreReport[i].score}

复制代码

如果使用 reduce

var sum = scoreReport.reduce(function(prev, cur) { return cur.score + prev},0);

复制代码

Vuex

Vuex 中规则只能在 mutations 里修改 state 中的数据,actions 不能直接修改 state

创建 Vuex.Store 实例保存到变量 store 中,使用 export default 导出 store

import Vuex from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({ })export default store

复制代码

state

常常写的文件 store.js

import Vue from 'vue'import Vuex from 'vuex'// import * as getters from './getters'Vue.use(Vuex)const state = { // 放置初始状态 a: 123};

const mutations = { // 放置我们的状态变更函数};

export default new Vuex.Store({ state, mutations, // getters})

复制代码

this.$store.state来获取定义的数据

import Vuex from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({ state: { count: 1 }})export default store

复制代码

import Vuex from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({ state: { count: 1 }, getters: { // getters相当与vue中的computed计算属性 getStateCount: function(state){ return state.count+1; } }})export default store

复制代码

要修改 state 中的值,需要提交 mutation 来修改

Vuex 中的 getter,就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,并且只有当它的依赖值发生了改变才会被重新计算。

Getter 接受 state 作为其第一个参数:

const store = new Vuex.Store({ state: { todos: [ { id: 1, text: '...', done: true }, { id: 2, text: '...', done: false } ] }, getters: { doneTodos: state => { return state.todos.filter(todo => todo.done) } }})

复制代码

getter 在通过属性访问时,是作为 Vue 的响应式系统的一部分缓存其中的

getter 在通过方法访问时,每次都会去进行调用,而不会缓存结果。

某函数中{ this.$store.commit('add');}

import Vuex from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({ state: { count: 1 }, getters: { // getters相当与vue中的computed计算属性 getStateCount: function(state){ return state.count+1; } }, mutations: { add(state) { state.count += 1; }, }})export default store

// xxx.vue{ {$store.getters.getStateCount}}

复制代码

提交 mutation-对象风格的提交方式,直接使用包含 type 属性的对象:

store.commit({ type: 'increment', amount: 10})

复制代码

Vuex 中还有一个 Actions,这个目的是不想上面那样直接修改 store 里面的值,而是通过去提交一个 actions,然后再在 actions 中提交 mutations 中去修改状态值。

先定义 actions 提交 mutations 的函数

示例:

某函数中{ this.$store.dispatch('addFun')}

import Vuex from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({ state: { count: 1 }, getters: { // getters相当与vue中的computed计算属性 getStateCount: function(state){ return state.count+1; } }, mutations: { add(state) { state.count += 1; }, }, actions: { // 注册actions,相当于vue中的methods addFun(context){ // context接收一个与store实例具有相同方法的属性的context对象 context.commit('add') }, }})export default store

复制代码

使用 mapState,mapGetters,mapActions,代替this.$store.state.count和this.$store.dispatch('addFun')这种写法。

如何使用:

import {mapState, mapGetters, mapActions} from 'vuex';

// 使用computed 状态变化

computed: { ...mapState({ countdada: state=>state.count })}

// 将 store 中的 getter 映射到局部计算属性:import { mapGetters } from 'vuex'

export default { // ... computed: { // 使用对象展开运算符将 getter 混入 computed 对象中 ...mapGetters([ 'doneTodosCount', 'anotherGetter', // ... ]) }}

...mapGetters({ // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount` doneCount: 'doneTodosCount'})

复制代码



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。