前端冲刺必备指南

前言

每天努力一点点💪,就能升职加薪💰当上总经理出任 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 时返回该对象

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

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

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

  3. 一个操作数为 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. 返回项的起始位置

  2. 返回项的结束位置

特性,如果是负数,则用数组长度加上该值确定位置,启示位置实为数组的实际下标,结束位置的实际下标为结束数值减 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

接收参数:

  1. 要在每一项上运行的函数

  2. 运行该函数的作用域对象

传入参数:

  1. 数组项的值 item

  2. 该项在数组中的位置 index

  3. 数组对象本身 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'})

复制代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值