vue前置知识-end

Vue3前置知识

1.常量与变量

  • let 声明变量

  • const 声明常量

const声明的对象和数组可以添加或删除元素,在JS中对象和数组属于引用类型,对其增加删除并不会改变其内存地址,而是改变内存地址当中具体的值

2.模板字符串

模板字符串使用反引号声明

js 复制代码
``

特点:

  • 可以任意换行

  • 可嵌入变量或表达式;嵌入的语法为 ${}

3.对象

3.1 对象的取值方式

js 复制代码
const obj = {
    name: 'vue3',
    age: 9
}
console.log(obj.name)
console.log(obj.age)
// 等同于
console.log(obj['name'])
console.log(obj['age'])

在使用变量来访问对象中的属性时,只能使用\[\]方式

3.2 对象属性的简写

js 复制代码
let min = 1
let max = 99

const obj = {
    min,        // min: min
    max,        // max: max
    fn() {}     // fn: function() {}
}

3.3 解构赋值

数组的解构

js 复制代码
const arr = [11, 22, 33]
// eg1: 把 arr 中的3个值分别赋值给变量 a, b, c
// 以前的写法
let a = arr[0]
let b = arr[1]
let c = arr[2]
// 现在的写法
let [a, b, c] = arr
// eg2: 把 arr 中的后两个值赋值给变量 b,c
let [,b,c] = arr
// eg3: 把 arr 中的第1个值赋值给变量 a, 剩余的全部给到变量 rest
let [a, ...rest] = arr

对象的解构

js 复制代码
const obj = {
    name: '孙悟空',
    age: 9,
    address: '花果山'
} 
// eg1: 把 obj 中的3个属性值分别赋值给变量 name, age, address
// 以前的写法
const name = obj.name
const age = obj.age
const address = obj.address
// 现在的写法
const { name, age, address } = obj
// eg2: 把 obj 的 age, address 属性值赋值给 age, address
const { age, address } = obj
// eg3: 把 obj 的 name 属性值赋值给变量 name, 剩余的全部给到变量 rest
const { name, ...rest } = obj
// eg4: 把 obj 的 name 属性值赋值给变量 uname
const { name: uname } = obj

4.箭头函数

js 复制代码
() => {}

特性:

  • 参数只有一个时,小括号可以省略;函数体只有一句话时,可以省略大括号(并且自带return

  • 当函数体简写时返回一个对象,为了避免歧义需要加上一对小括号

5.数组的重要方法

method function parameter return
push(element0 , element1 , ...) 尾插 0 - n个元素 新的长度
pop() 尾删 null 删除元素的值
unshift(element0 , element1 , ...) 头插 0 - n个元素 新的长度
shift() 头删 null 删除元素的值
splice(startPos , deleteCount , item1 , item2, ...) 任意位置插入删除 startPos:开始下标 deleteCount(可选):删除元素的数量 item1...(可选):加入到数组中的元素 删除的元素数组
includes(searchElement , fromIndex) 包含 searchElement:需要查找的值 fromIndex(可选):开始搜索的索引,默认从0开始 布尔值
forEach(callback) 遍历 callback:为数组中每个元素执行的函数,这个函数包括三个参数(item,index, array) undefined
filter(callback) 过滤 callback:为数组中每个元素执行的函数,这个函数包括三个参数(item,index, array) 回调函数中为true结果的元素会保留到新数组中
map(callback) 映射 callback:为数组中每个元素执行的函数,这个函数包括三个参数(item,index, array) 一个新数组,每个元素都是回调函数的返回值
every(callback) 检测每一个是否都满足条件 callback:这个函数包括三个参数(item,index, array),当前回调函数返回值为false则该函数不在继续执行 布尔值
reduce(callback , initialValue) 汇总 callback:为数组中每个元素执行的函数,这个函数包括四个参数(prev, item,index,array),prev为上一次函数返回值 initialValue:在第一次调用时,如果指定了 initialValue 则为指定的值,否则为 array0 的值。 遍历整个数组后的值

forEach和map的区别:forEach会修改原始数组,map则会返回一个新的数组。

6.对象的重要方法

Object.keys(): 将对象中的所有属性装到数组中返回,因为操作数组的方法有很多,这样更加灵活

js 复制代码
const obj = {
    id: 10001,
    name: '孙悟空',
    age: 9,
    address: '花果山'
}
// 遍历对象
Object.keys(obj).forEach(key => { console.log(obj[key]) })

7.扩展运算符

7.1 可以复制数组或者对象

js 复制代码
const arr1 = [1, 2, 3]
// 赋值
const arr2 = arr1
arr2.push(44)
console.log(arr1)// 受影响了
// 正确的做法, 把 arr1 复制⼀份给到 arr2
const arr2 = [...arr1]

7.2 合并数组或对象

js 复制代码
const arr1 = [1,2,3]
const arr2 = [4,5,6]
// 把 arr1 和 arr2 合并起来给到 arr
const arr = [...arr1, ...arr2]

8.序列化和反序列化

序列化JSON.stringify(对象)

反序列化JSON.parse(json格式的字符串)

9.Web存储

  • sessionStorage该存储区域在⻚⾯会话期间可⽤(即只要浏览器处于打开状态,包括⻚⾯重新加载和恢复)

  • localStorage即使浏览器关闭并重新打开也仍然存在;存储的数据没有过期⽇期,只能通过 JavaScript、清除浏览器缓存或本地存储的数据来清除。

js 复制代码
// 存
localStorage.setItem(key:string, value:string)
// eg:
localStorage.setItem('uname', 'Jack')


// 取
localStorage.getItem(key:string)
// eg:
const uname = localStorage.getItem('uname')


// 删
localStorage.removeItem(key:string)
localStorage.removeItem('uname')

存对象和数组,需要序列化;取对象和数组,需要反序列化。

10.Promise + Aysnc/Await

  1. 在执行异步任务时,有时候有些需求是执行完一个异步任务后执行下一个异步任务,这样会产生大量的回调函数,使代码很不优雅,而Promise是为了消除回调地狱而诞生的。

  2. Promise是一个类,用来包装异步操作,根据异步操作的结果,是成功还是失败,进而决定Promise是成功还是失败;Promise支持链式调用。

  3. Promise的3种状态:PendingFulfilledRejected,分别是进行中、成功、失败。

  4. Promise的状态只能由 Pending -> FulfilledPending -> Rejected,状态一旦确定就不可改变。

10.1 基本使用

js 复制代码
/*
    1.Promise需要传递一个函数,函数有两个参数,都是函数
    2.当异步代码成功时调用resolve,异步代码失败时调用reject
    3.Promise的实例拥有then方法,也有两个回调函数为参数,第一个回调是成功的回调函数,第二个回调是失败的回调函数
*/
const p = new Promose((resolve, reject) => {
    // 这⾥编写异步代码:⽐如定时器、ajax请求等
    setTimeout(() => {
        // 2秒后, Promise标记为成功
        resolve('ok')
    }, 2000)
})

p.then((msg) => {
    // 成功回调
    console.log(msg)// ok
}, (err) => {
    // 失败回调
    console.log(err)// error
})

10.2 使用Async和Await优化Promise

js 复制代码
// 封装延迟函数
function delay(duration, n) {
    return new Promise((resolve , reject) => {
        setTimeout(() => {
            resolve(n)
        } , duration)
    })
}
// 语法
async function log() {
    // 1.在Promise实例前添加 await 关键字, 那么await的返回值就是当前Promise的resolve参数
    // 2.await所在的函数必须被async修饰
    // 3.async函数内, 当前await执⾏结束了,代码才会继续往后执⾏(同步的⽅式执⾏)
    const n1 = await delay(2000, 1)
    console.log(n1)
}

log()

11.模块化

模块化是指将一个复杂程序划分为一些列独立,和互操作的模块的过程。每个模块负责特定的功能或任务,通过定义好的接口与其他模块进行通信。一个模块本质就是一个js文件。

11.1 默认导入导出

js 复制代码
// 文件路径:utils/min.js
// 定义并默认导出求最⼩值函数
export default function min(m, n) {
    return m > n ? n : m
}

// 文件路径:src/index.js
// 默认导入
import min from './utils/min.js'
console.log(min(12,11)

默认导出 export default 在一个模块种最多出现1次。

11.2 按需导入导出

js 复制代码
// 文件路径:utils/math.js
// 定义求和函数并按需导出
export function add(x, y) {
    return x + y
} 
// 定义作差函数并按需导出
export function sub(x, y) {
    return x - y
}

//  文件路径:src/index.js
import { add , sub } from './utils/math.js'
console.log(add(33 , 18))
console.log(sub(33 , 18))

按需导入 export 可以出现多次。

相关推荐
AlienZHOU3 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
Captaincc7 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
计算机魔术师8 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen9 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒9 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow9 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林8189 小时前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器
JamesZhang800789 小时前
页面内存只涨不跌? 一次泄漏排查, 牵出 WeakMap 的诞生
前端
Z小明9 小时前
第 6 章 组件进阶
前端·vue.js
江华森9 小时前
HTTP请求的完整过程详解:从DNS解析到TCP挥手的微秒级实战分析
前端